簡體   English   中英

將JavaScript對象/哈希傳遞給Handlebars幫助器?

[英]Pass JavaScript object/hash to Handlebars helper?

是否可以將JavaScript對象/哈希傳遞給Handlebars幫助程序調用? 我想做這樣的事情:

<label>Label here</label>
{{#textField {'id':'text_field_1', 'class':'some-class', size:30} }}{{/textField}}
<p>Help text here.</p>

這是一個jsFiddle 目前它產生以下錯誤

Uncaught Error: Parse error on line 3:
...bel>  {{#textField {'id':'text_field_1'
----------------------^
Expecting 'CLOSE', 'CLOSE_UNESCAPED', 'STRING', 'INTEGER', 'BOOLEAN', 'ID', 'DATA', 'SEP', got 'INVALID' 

或者,我可能會這樣做並拆分',',但我不喜歡語法:

{{#textField "'id'='text_field_1','class'='some-class',size=30"}}{{/textField}}

注意:我特別不希望將數據/屬性(id,類,大小等)作為JSON對象傳遞給template()方法。 我想要模板中的所有內容。

解決了。 我這樣做了:

幫手:

Handlebars.registerHelper('textField', function(options) {
    var attributes = [];

    for (var attributeName in options.hash) {
      attributes.push(attributeName + '="' + options.hash[attributeName] + '"');
    }

    return new Handlebars.SafeString('<input type="text" ' + attributes.join(' ') + ' />');
});

和模板:

<label>Label here</label>
{{textField id="text_field_1" class="some-class" size="30" data-something="data value"}}
<p>Help text here.</p>

根據文檔 (頁面底部),您可以將可變數量的參數傳遞給輔助方法,並且它們將在options.hash中可用(假設“options”是輔助方法的參數)。 而且這也很好,你可以使用命名參數,參數順序無關緊要。

我發現了另一種傳遞物體的最佳方法。

模板:

{{textField dataAttribs='{"text":"Hello", "class": "text-field"}'}}

幫手:

Handlebars.registerHelper('textField', function(options) {
    var attribs;

    attribs = JSON.parse(options.hash.dataAttribs);
    console.log(attribs.text + " -- " + attribs.class);
    ......
    ........
});

JSFiddle為此

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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