这就是我想要的,一个自定义模块的辅助,可以像一个模板,监测它自己的事件等产生的HTML代码如下所示:流星块助手,其作用类似于一个模板
{{#expandable}}
{{#if expanded}}
Content!!!
<div id="toggle-area"></div>
{{else}}
<div id="toggle-area"></div>
{{/if}}
{{/expandable}}
而这里的一些JavaScript我放在一起。如果我只是将上面的模板声明为模板,但是我希望它适用于给予该块帮助器的任何输入。
Template.expandableView.created = function() {
this.data._isExpanded = false;
this.data._isExpandedDep = new Deps.Dependency();
}
Template.expandableView.events({
'click .toggle-area': function(e, t) {
t.data._isExpanded = !t.data._isExpanded;
t.data._isExpandedDep.changed();
}
});
Template.expandableView.expanded = function() {
this._isExpandedDep.depend();
return this._isExpanded;
};
我知道我可以喜欢这个语法声明块助手:
Handlebars.registerHelper('expandable', function() {
var contents = options.fn(this);
// boring block helper that unconditionally returns the content
return contents;
});
但不会有模板的行为。
在此先感谢!目前的Meteor实现可能不太可能。
更新
通过HubertOG给出的实现是超爽,但expanded
助手是不是从内下content
访问:
在实际块帮手,expanded
是未定义,因为真实的东西是上下文中的一个层次。我尝试了诸如{{../expanded}}
和{{this.expanded}}
之类的东西,但无济于事。
奇怪的是,事件处理程序正确连接了....当我点击该按钮,它触发,但expanded
助手就是简单从来没有从content
中调用,所以即使console.log()
调用从未被触发。
嘿,请看看我的编辑。看起来事情并不像他们第一次出现那么简单:/ – blaineh