【发布时间】:2011-09-02 14:57:16
【问题描述】:
我正在创建一个 jQuery 模板系统,它会根据需要递归调用相同的模板。大多数“递归”模板的示例实际上只是调用其他模板的模板,甚至是pass around the $item object to retain custom functions 的模板。在这种情况下,我想使用原始 $data(AKA $item.data)的子部分调用相同的模板,同时还传递传递给原始 tmpl 调用选项的自定义模板函数。
// original template call
$("#someTemplate").tmpl(data, {
someFunction1: function(itemToCheck) {
return itemToCheck.p3;
},
someFunction2: function(itemToCheck) {
return itemToCheck.p1 + ", " + itemToCheck.p2;
}
}).appendTo(".results");
<!--in-template secondary call-->
{{tmpl($data.sub, $item) "#someTemplate"}}
似乎将$item 作为递归调用的选项参数传递会导致数据参数被忽略,可能是因为$item.data 包含原始对象并且它只是覆盖了新的数据参数。结果,在每个递归级别,我仍然在对象中的原始调用者级别进行操作,并且在对象结构中没有进一步的进展(因此出现堆栈问题)。
我需要使用$item 的其他属性来仅传递自定义函数而不让$item.data 覆盖传入的模板数据吗?
更新
您绝对不能只将$item 作为选项参数传递给{{tmpl}}。在looking at the code 之后,它将data 设置为新的模板调用,然后在几行之后将其与原来的$item.data 到jQuery.extend 一起吹走。
【问题讨论】:
标签: jquery-templates