1

显然这不起作用: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}}帮助程序块,仅在与上次调用相比内容发生更改时才呈现。用例是一个循环,每次模型的一个属性与最后一个不同时都应该显示一些内容.如果您有其他想法如何实现这一点,非常感谢您的评论!)

4

2 回答 2

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}}

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

于 2013-09-11T15:30:04.510 回答
0

您可以使用isDirty属性 fromDS.Model来了解数据何时更改。

在一些模板中:

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

还有一个带有演示的jsfiddle

于 2013-08-07T00:11:38.097 回答