Ember.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}}助手块,该助手块只在内容与上次调用相比发生变化时才会呈现。用例是一个循环,应该在每次模型的一个属性与最后一个不同,如果你有其他想法如何实现这一点,评论非常感谢!)


如果任何人有兴趣,在这个特定的用例中,我围绕不能使用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}}

大的改善空间,但一个可用的起点。


您可以使用isDirty财产DS.Model当知道数据的变化。

在某些模板中:

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

和演示的jsfiddle。

链接地址: http://www.djcxy.com/p/61587.html

上一篇: Ember.js Handlebars block helper

下一篇: Context binding while using nested each blocks in Ember Handlebars