2013-08-06 15 views
11

JavaScriptオブジェクト/ハッシュをHandlebarsヘルパー呼び出しに渡すことは可能ですか?HandlebarsヘルパーにJavaScriptオブジェクト/ハッシュを渡しますか?

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

Here is a 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}} 

注:私は、具体的にしたくありませんdata/attributes(id、class、sizeなど)をJSONオブジェクトとしてtemplate()メソッドに渡します。私はテンプレートのすべてを欲しい。

答えて

13

解決済み。私はこれをした:

ヘルパー:

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(' ') + ' />'); 
}); 

テンプレート:the documentationパー

<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(オプションはヘルパーメソッドのパラメータであると仮定します)で利用可能になります。また、これについては、名前付きのパラメータを使用でき、パラメータの順序は問題ではないという点で優れています。

+1

どのように我々は、動的テキスト&値を渡すことができます?。次のことを試してみましたが、これはうまくいかなかったのです。とにかく?実際に私は値をデータに付加する必要があります。これは、投稿者が最初に求めたハッシュマッピングを保持するためのテキスト – Newbie

9

オブジェクトを渡すもう1つの方法が見つかりました。

テンプレート:

{{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 for this

+0

+1の属性 - HTML属性を模倣するので、私は受け入れられた回答のAPIがもう少し好きです。 – srquinn

+1

受け入れられた回答は、キーを前もって知っているときに最も効果的です。そうしないと、これはまともな回避策です。 – mynameistechno

関連する問題