将变量传递给车把助手调用

时间:2013-08-12 20:07:41

标签: javascript templating handlebars.js

我想将模板数据传递给我定义的“textfield”辅助方法,如下所示:

{{textfield label="{{label}}"
            id="account_{{attributes.id}}"
            name="account[{{attributes.name}}]"
            class="some-class"
            required="true"}}

(请注意{{textfield}}帮助程序调用中的{{label}}和{{attributes.id}}引用)

以下是我设置模板的地方:

data = {
  "attributes": {
    "id": "name",
    "name": "name"
  },
  "label": "Name"
}
var templateHtml = 'markup here';
var template = Handlebars.compile(templateHtml);
var formHtml = template(data);

这是jsFiddle

当我运行它时,我仍然在编译的标记中看到{{placeholders}}。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:8)

您使用不正确的语法将命名参数传递给您的把手助手。你想要的是这样的:

var data = {
  "attributes": {
    "name": "name"
  }
}
var templateHtml = '{{textfield name=attributes.name}}';
var template = Handlebars.compile(templateHtml);
var formHtml = template(data);

更新的小提琴:http://jsfiddle.net/3yWn9/1/

答案 1 :(得分:0)

好吧,似乎两次编译模板都有效。从效率的角度来看很糟糕,但事实就是如此。如果有人有替代解决方案,请发帖。

var data = { "something": "value", "id": "theId", "theClass": "class-here", "value": "the value" };
var markup = $('#test-template').html();
var template = Handlebars.compile(markup);
var compiled = template(data);
var template2 = Handlebars.compile(compiled);
var compiled2 = template2(data);
$('body').append(compiled2);

这是一个新的jsFiddle,展示了双重编译。