Есть ли более элегантный способ обхода шаблонов?

Я пытаюсь получить доступ к контексту данных родителей

Чтобы добраться до него, у меня есть строка, которая выглядит следующим образом:

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 в вашем определении шаблона нарушает все по неизвестной причине).

Другие вопросы по тегам