Есть ли более элегантный способ обхода шаблонов?
Я пытаюсь получить доступ к контексту данных родителей
Чтобы добраться до него, у меня есть строка, которая выглядит следующим образом:
template.view.parentView.parentView.parentView.parentView.dataVar.curValue
Что с точки зрения пользовательского интерфейса, у меня есть
template [dataIwant] отображает другой шаблон с модальным диалогом, который использует автоформу
Затем я использую автоформальную ловушку, чтобы получить событие перед сохранением, которое я хочу использовать, чтобы добавить дополнительное значение к сохраняемому документу.
Затем я иду по шаблону, который передается в крючке, к верхнему шаблону. Похоже, я должен быть в состоянии сделать это более элегантным способом?
1 ответ
Придумал этот код сегодня, потому что он мне тоже был нужен:
_.extend(Blaze.View.prototype,{
closest: function(searchedViewName){
currentView = this;
while (currentView && currentView.name != searchedViewName){
currentView = currentView.parentView;
}
return currentView;
}
});
<template name="parent">
{{> child}}
</template>
Template.parent.created = function(){
this.reactiveVar = new ReactiveVar(false);
};
<template name="child">
{{parentName}}
{{parentVar}}
</template>
Template.child.helpers({
parentName:function(){
return Template.instance().view.closest("parent").name;
},
parentVar:function(){
return Template.instance().view.closest("parent")._templateInstance.reactiveVar.get();
}
});
Пока все хорошо, но я уже заметил случаи использования, когда это не сработает (использование Template.contentBlock в вашем определении шаблона нарушает все по неизвестной причине).