Ember.js Handlebars阻止助手

时间:2013-08-06 19:12:55

标签: ember.js handlebars.js

显然这不起作用: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()直接写入输出缓冲区。

但是,我需要一种直接使用块内容输出的方法。

我尝试覆盖了一个视图的render函数,但这也没有把我带到任何地方。

(背景:我正在尝试编写一个{{#ifchanged}}辅助程序块,只有在内容与上一次调用相比发生变化时才会显示。用例是一个循环,每当有一个模型与最后一个模型不同。如果你有其他想法如何实现这一点,评论非常感谢!)

2 个答案:

答案 0 :(得分:1)

如果有人有兴趣,在这个特定的用例中,我解决了无法像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}}

模板:

{{1}}

有很大的改进空间,但却是一个可用的起点。

答案 1 :(得分:0)

您可以使用isDirty中的DS.Model属性来了解数据何时发生变化。

在某些模板中:

{{#if isDirty}}
    You changed the model<br/>
{{/if}}

带有演示的jsfiddle