我有一个部分模板,代表表中的一行,也可以直接从Javascript中使用(参见下面的背景)。以下是我如何将其用作部分内容:
{{#each this}}
{{> my_onerow}}
{{/each}}
以下是简化的my_onerow
:
<div>{{@key}}: {{x}}, {{y}}</div>
我将这些模板设为JST.my
和JST.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;
这个位工作正常。我只是提到它。
答案 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
。