我正在创建一个jQuery模板系统,根据需要递归调用相同的模板。大多数“递归”模板的例子实际上只是调用其他模板的模板,甚至是pass around the $item
object to retain custom functions的模板。在这种情况下,我想使用原始$data
(AKA $item.data
)的子部分调用相同的模板,同时传递传入原始{{1的选项的自定义模板函数调用。
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"}}
作为递归调用的options参数会导致数据参数被忽略,这可能是因为$item
包含原始对象并且它只是覆盖了新的数据参数。因此,在每个递归级别,我仍然在对象的原始调用者级别操作,并且在对象结构中没有进一步的进展(因此堆栈问题)。
是否还有$item.data
的其他属性我需要使用它来传递自定义函数而不使$item
覆盖传入的模板数据?
您绝对不能将$item.data
作为选项参数传递给$item
。在looking at the code之后,它会为新模板调用设置{{tmpl}}
,然后在原来的data
到$item.data
后几行将其吹走。
答案 0 :(得分:0)
虽然我似乎找不到包含所有自定义函数的$item
上的变量,但我能够通过从原始$item
对象单独传递每个自定义函数来解决此问题。不理想,但它有效。
{{tmpl($data.sub, { someFunction1: $item.someFunction1, someFunction2: $item.someFunction2 }) "#someTemplate"}}