Я создаю систему шаблонов jQuery, которая рекурсивно вызывает тот же шаблон, что и при необходимости.Большинство примеров "рекурсивных" шаблонов на самом деле являются просто шаблонами, вызывающими другие шаблоны, даже те, которые передают объект $item
для сохранения пользовательских функций .В этом случае я хочу вызвать тот же шаблон с частью исходного $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"}}
Полный код jsFiddle
Кажется, что пропуск $item
в качестве параметра параметров для рекурсивного вызова приводит к игнорированию параметра данных, возможно, из-за $item.data
содержит исходный объект и просто перезаписывает новый параметр данных.В результате на каждом рекурсивном уровне я все еще работаю на исходном уровне вызывающего объекта в объекте и не продвигаюсь дальше в структуре объекта (отсюда проблема стека).
Есть ли какое-то другое свойство $item
Мне нужно использовать для передачи только пользовательских функций без $item.data
переопределения передаваемых данных шаблона?
Обновление
Вы определенно не можете просто передать $item
в качестве параметровпараметр до {{tmpl}}
.После просмотра кода он устанавливает data
для нового вызова шаблона, а затем удаляет его с оригинальными $item.data
через jQuery.extend
несколькими строками позже.