簡體   English   中英

在Handlebars.js幫助程序方法中編譯LESS

[英]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助手綁定在一起? 或者,是否有更好的方法可以解決我看不到的全部問題?

任何想法將不勝感激。

到目前為止,我的想法是:

  • 擺脫LESS解析-這不是一個好主意,因為我依賴LESS解析,在這種情況下,我將不得不重新實現相同類型的解析。
  • 獲取回調方法以將渲染的內容直接插入到文檔中-再次不好,因為它破壞了管道和模板模型的方法

注意,在您的代碼中, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM