Javascript 在handlebar.js helper方法中编译LESS
这是一个Meteor.js应用程序。我需要将用户定义的自定义CSS样式注入到页面中。更好的是,我需要解析这个CSS,重新格式化它,添加一些额外的样式,然后将它注入到页面中 把手用作视图样板。因此,在模板中,我有以下内容:Javascript 在handlebar.js helper方法中编译LESS,javascript,meteor,less,handlebars.js,Javascript,Meteor,Less,Handlebars.js,这是一个Meteor.js应用程序。我需要将用户定义的自定义CSS样式注入到页面中。更好的是,我需要解析这个CSS,重新格式化它,添加一些额外的样式,然后将它注入到页面中 把手用作视图样板。因此,在模板中,我有以下内容: <style id="custom_styles"> {{#parseLess}} {{{custom_css}}} {{/parseLess}} </style> 在utils.parseLess方法中,我使用较少的CSS编译器编译最终的CSS。
<style id="custom_styles">
{{#parseLess}} {{{custom_css}}} {{/parseLess}}
</style>
在utils.parseLess
方法中,我使用较少的CSS编译器编译最终的CSS。以下是一个片段:
var parser = new less.Parser;
parser.parse(updatedSource, function (err, tree) {
if (err) { return console.error(err) }
console.log(tree.toCSS());
return tree.toCSS();
});
现在棘手的部分是parser.parse()
方法似乎是异步的。这打破了整个链条。回调方法被正确调用,但其内容从未传递回Handlebars模板
问题-如何将异步较少的解析器与Handlebars助手联系起来?或者,有没有更好的方法来处理我没有看到的事情
任何想法都将不胜感激
到目前为止,我的想法是:
- 摆脱较少的解析——这不是个好主意,因为我依赖较少的解析,在这种情况下,我必须重新实现相同的解析
- Get callback方法将呈现的内容直接插入到文档中——同样,这不是很好,因为它破坏了管道和模板模型方法
返回tree.tocs()
不从utils.parseLess
方法返回,而只从回调函数返回。我想你应该把它改写成这样(顺便说一句,调用tree.tocs
两次也是个很糟糕的主意):
不,parser.parse()不是异步的,它在回调函数返回时返回
var parser = new less.Parser;
parser.parse(updatedSource, function (err, tree) {
if (err) { return console.error(err) }
console.log(tree.toCSS());
return tree.toCSS();
});
var parser = new less.Parser;
var cssResult;
parser.parse(updatedSource, function (err, tree) {
if (err) {
return console.error(err);
}
cssResult = tree.toCSS();
console.log(cssResult);
});
return cssResult; // this is the return from utils.parseLess