如何在部分模板中设置@key? (或者为什么不可能?)

时间:2014-01-29 08:10:05

标签: handlebars.js

我有一个部分模板,代表表中的一行,也可以直接从Javascript中使用(参见下面的背景)。以下是我如何将其用作部分内容:

{{#each this}}
{{> my_onerow}}
{{/each}}

以下是简化的my_onerow

<div>{{@key}}: {{x}}, {{y}}</div>

我将这些模板设为JST.myJST.my_onerow,因此我的JavaScript看起来像:

var obj={
  one:{x:"this",y:"that"},
  two:{x:55,y:77},
  three:{x:"hello",y:"world"}
  };
$('body').append(JST.my(obj));

@key部分可用,所以我明白了:

<div>one: this, that</div>
<div>two: 55, 77</div>
<div>three: hello, world</div>

然后,当我想直接从JavaScript添加另一行时,我会这样做:

var newObj = {x:"new",y:"entry"};
$('body').append(JST.my_onerow(newObj));

这也很好,但@key"",我不知道如何定义它。这不起作用:

var newObj = {"@key":"four",x:"new",y:"entry"};

我的问题是:如何直接使用@key模板定义JST.my_onerow?或者,如果不可能,任何人都可以对Handlebars的内部结构进行一些了解,以解释为什么它不能轻易添加?

(我正在使用把手1.3.0。)


背景:我这样做是通过将其创建为普通模板,编译成JST,然后使用此行将所有模板作为部分模板提供:

Handlebars.partials = JST;

这个位工作正常。我只是提到它。

1 个答案:

答案 0 :(得分:0)

(我现在使用的hack-ish解决方法的自我回答,以防万一我真的不想做。)

我目前所做的是预处理数据,将值部分中的对象键添加为key成员。这是在使用JST.my

之前完成的
for(key in obj)obj.key = key;
$('body').append(JST.my(obj));

然后我改变my_onerow看起来像这样:

<div>{{key}}: {{x}}, {{y}}</div>

当然,当我直接从JavaScript添加行时,我可以很容易地指定key