Я показываю тот же шаблон Handlebars в нескольких (сколь угодно многих) местах на той же странице. Внутри каждого шаблона я хочу, чтобы кнопка переключала видимость div. Когда я сохраняю это состояние с помощью Session.set
, нажатие одной кнопки, очевидно, переключает все div во всех экземплярах шаблонов, которые нежелательны.
Я мог бы сохранить состояние в контексте данных экземпляра шаблона (который привязан к this.data
в обратных вызовах Template.myTemplate.rendered
и Template.myTemplate.created
), но есть две проблемы с этим.
-
this.data
не является реактивным источником данных, поэтому не будет распространяться на div - У меня нет доступа к экземпляру шаблона в
Template.myTemplate.events
(как обсуждалось в meteor-core)
Наконец, я мог бы как-то сохранить его в коллекции. Но как бы я однозначно идентифицировал состояние для каждого созданного шаблона? Также может быть хакерский способ с jQuery, но это не так, как я хочу разрабатывать приложения Meteor, которые должны работать с реактивными шаблонами. Особенно, когда этот шаблон становится более сложным.
Я что-то пропустил или действительно не эквивалентен контроллерам AngularJS, которые передают $scope
для каждого экземпляра шаблона?
Обновление: Я думал о чем-то подобном.
template.html:
<template name="jsonObject">
<input type="button" />
<div class="{{hidden}}">content</div>
</template>
client.js:
Template.jsonObject.hidden = function(){
var ret = "";
if (this._hidden) {
ret = "hidden";
}
return ret;
};
Template.jsonObject.events({
'click input' : function(event, template){
template.data._hidden = true;
}
});