2013-08-06 186 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