具有自定义函数的递归jQuery模板导致堆栈溢出?

时间:2011-09-02 14:57:16

标签: jquery-templates

我正在创建一个jQuery模板系统,根据需要递归调用相同的模板。大多数“递归”模板的例子实际上只是调用其他模板的模板,甚至是pass around the $item object to retain custom functions的模板。在这种情况下,我想使用原始$data(AKA $item.data)的子部分调用相同的模板,同时传递传入原始{{1的选项的自定义模板函数调用。

tmpl

Full code jsFiddle

似乎传递// 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后几行将其吹走。

1 个答案:

答案 0 :(得分:0)

虽然我似乎找不到包含所有自定义函数的$item上的变量,但我能够通过从原始$item对象单独传递每个自定义函数来解决此问题。不理想,但它有效。

{{tmpl($data.sub, { someFunction1: $item.someFunction1, someFunction2: $item.someFunction2 }) "#someTemplate"}}