2013-08-06 144 views
1

显然,这不工作:http://jsbin.com/efapob/3/editEmber.js把手块帮手

Ember.Handlebars.registerHelper('foo', function(options) { 
    var result = 'BEFORE ' 
      + options.fn(this) 
      + ' AFTER'; 
    return new Handlebars.SafeString(result); 
}); 

,我想这是因为FN()直接写入到输出缓冲器。

但是,我需要一种方法来直接处理块内容的输出。

我试着覆盖一个视图的render函数,但那也没有引导我到任何地方。我想写一个{{#ifchanged}}帮助程序块,它只在内容与上次调用相比时发生变化时才会呈现。用例是一个循环,每当模型的一个属性为如果你有其他的想法如何实现这一点,评论非常赞赏!)

+0

你使用的是烬数据? –

+0

是的。有趣的是,这怎么连接? – graup

+0

因为您可以使用isDirty属性来了解某些属性何时更改。看看我的回答。 –

回答

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

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

0

你可以使用isDirty财产DS.Model知道什么时候数据的变化。

在一些模板:

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

并与演示一个jsfiddle

+0

谢谢,但我不想知道*如果模型已经改变*,但只是如果一个属性不同于{{each}}循环中最后一个属性。 – graup

+0

你有一个元素数组,然后在迭代中,如果当前元素的某些属性与前一个不同,你想知道吗? –

+0

准确地说。我有一组具有“组”属性的项目,并且对于每个组我想显示一行文本,但只显示一次。 – graup