显然这行不通:http://jsbin.com/efapob/3/edit
Ember.Handlebars.registerHelper('foo', function(options) {
var result = 'BEFORE '
+ options.fn(this)
+ ' AFTER';
return new Handlebars.SafeString(result);
});
我假设这是因为fn()直接写入输出缓冲区。
但是,我需要一种直接处理块内容输出的方法。
我尝试覆盖视图的渲染
函数,但这也没有给我带来任何好处。
(背景:我正在尝试编写一个{{#ifchange}}
辅助块,该块仅在内容与上次调用相比发生变化时才会呈现。用例是一个循环,每次模型的一个属性与上一个属性不同时都应该显示一些内容。如果您有其他想法如何实现这一点,评论非常感谢!)
如果有人感兴趣,在这个特定的用例中,我解决了无法使用fn()
的返回的问题,如下所示:
var ifchanged_last;
Ember.Handlebars.registerHelper('ifchanged', function(property, options) {
var value = Ember.Handlebars.get(this, property);
if (value !== ifchanged_last) {
options.fn(this, options);
}
ifchanged_last = value;
return;
});
模板:
{{#each content}}
{{#ifchanged some_key}}
The value changed
{{/ifchanged}}
{{/each}}
改进的空间很大,但却是一个可用的起点。
您可以使用DS. Model
中的isDirty
属性来了解数据何时更改。
在一些模板中:
{{#if isDirty}}
You changed the model<br/>
{{/if}}
和演示的jsfiddle。