2015-07-24 2 views
6

У меня есть шаблон с некоторыми вложенными шаблонами в Meteor:Получить реактивный вар из другого шаблона в Метеоре

<template name="collectingTmpl"> 
    {{> firstTmpl}} 
    {{> secondTmpl}} 
</template> 

Если установить реактивный уаг/Dict в firstTmpl с

Template.firstTmpl.events({ 
    'click .class-name': function(event, template) { 
    template.state = new ReactiveDict; 
    template.state.set('someName', 'someValue'); 
    } 
}); 

я могу получить это значение в пределах того же шаблона с

Template.firstTmpl.helpers({ 
    myValue: function() { 
    Template.instance().state.get('someName'); 
    } 
}); 

, но могу ли я также получить значение, установленное в firstTmpl от secondTmpl?

Я имею в виду что-то вроде

Template.secondTmpl.helpers({ 
    myValueFromAnotherTmpl: function() { 
    Template.firstTmpl.state.get('someName'); 
    } 
}); 

ответ

3

в качестве альтернативы вы можете установить ReactiveDict на родительском шаблоне, который collectingTmpl.

// always initialize your template instance properties 
// in an onCreated lifecycle event 
Template.collectingTmpl.onCreated(function(){ 
    this.firstTmplState = new ReactiveDict(); 
}); 

Тогда вы можете получить ссылки на этом свойство экземпляра шаблона в дочерних шаблонах, используя этот код:

Template.firstTmpl.onCreated(function(){ 
    // warning, this line is depending on how many parent templates 
    // the current template has before reaching collectingTmpl 
    var collectingTmplInstance = this.view.parentView.templateInstance(); 
    this.firstTmplState = collectingTmplInstance.firstTmplState; 
}); 

Template.secondTmpl.onCreated(function(){ 
    var collectingTmplInstance = this.view.parentView.templateInstance(); 
    this.firstTmplState = collectingTmplInstance.firstTmplState; 
}); 

Затем вы можете использовать стандартный синтаксис Template.instance().firstTmplState в любом из 3-х шаблонов, и они будут всегда указывают на тот же экземпляр ReactiveVar, определенный как свойство collectingTmpl.

1

Если вы заботитесь о текущем выпуске blaze (отсутствует контекст данных), вы можете получить доступ к другим шаблонам vars по Template.parentData().

См. Этот MeteorPad в качестве демонстрации, при каждом нажатии кнопки цвет фона будет изменен на каждом игроке. цвет определяется их родительского шаблона:

http://meteorpad.com/pad/zoiAvwuT3XXE5ruCf/Leaderboard_Template_parentData_Bug

Вы также можете прочитать на GitHub PullRequest о некоторых обновлениях я предлагаю

https://github.com/meteor/meteor/pull/4797

Приветствия Том