[英]Compiling LESS in Handlebars.js helper method
這是一個Meteor.js應用程序。 我需要將用戶定義的自定義CSS樣式注入頁面。 更好的是-我需要解析此CSS,對其進行重新格式化,添加一些其他樣式,然后將其注入到頁面中。
車把用作視圖模板。 所以,在模板中我有這個:
<style id="custom_styles">
{{#parseLess}} {{{custom_css}}} {{/parseLess}}
</style>
parseLess
是一個Handlebars輔助方法。 這里是:
Handlebars.registerHelper("parseLess", function(options){
return utils.parseLess(options.fn(this));
});
在utils.parseLess
方法中,我使用LESS 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模板。
問題-如何將異步LESS解析器與Handlebars助手綁定在一起? 或者,是否有更好的方法可以解決我看不到的全部問題?
任何想法將不勝感激。
到目前為止,我的想法是:
注意,在您的代碼中, return tree.toCSS();
不從utils.parseLess
方法返回,而僅從回調函數返回。 我懷疑您應該將其重寫為類似的內容(順便說一句,兩次調用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
而且, parser.parse()
不是異步的,它在回調函數返回時返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.