2016-06-14 37 views
0

我有一個幫助接收一組元素並返回一些其他數組基於第一個。EmberJS,Helpers and ComputedProperty

{{#each (sorted-strings myStrings) as |string|}} 
    {{string}} 
{{/each}} 

助手的實現可以是這樣的:

// app/helpers/sorted-strings.js 
import Ember from 'ember'; 

export function sortedStrings(params/*, hash*/) { 
    return params[0].sort(); 
} 

export default Ember.Helper.helper(sortedStrings); 

助手工作正常,但如果原來myString陣列都發生改變的更改不會影響已經呈現的列表。

如何將ComputedProperty的行爲與Helper的結果相結合?

回答

1

在經過很多努力之後,我發現正確的解決方案是宣佈組件而不是幫助。這樣我可以明確地宣佈計算屬性是觀察在myStrings陣的變化:

// app/components/sorted-strings.js 
export default Ember.Component.extend({ 
    myStrings: null, 
    sortedMyStrings: Ember.computed('myStrings', function() { 
    return this.get('myStrings').sort(); 
    }); 
}); 

// app/templates/components/sorted-strings.hbs 
{{#each sortedMyStrings as |string|}} 
    {{string}} 
{{/each}} 

// template 
{{sorted-strings myStrings=myStrings}} 
0

將計算屬性傳遞給助手應該可以正常工作。看看這twiddle

也許您的計算屬性沒有得到正確更新。

3

使用notifyPropertyChange()將通知幫助者數組已更改。我認爲,助手有對數組的參考,並不知道它的內容或長度發生了變化

喜歡這個

actions: { 
    add() { 
    this.get('myStrings').pushObject('testing'); 
    this.notifyPropertyChange('myStrings'); 
    } 
    } 

我已經更新了玩弄 - 這裏是新的鏈接https://ember-twiddle.com/31dfcb7b208eb1348f34d90c98f50bbb?openFiles=controllers.application.js%2C

+0

這工作,謝謝。但它是瘋狂的,如果最後我必須明確地通知一個變化,那麼使用所有'get'和'set' Ember屬性操縱符有什麼意義?在我的情況下,數組元素屬性由'{{x-select}}'助手修改,所以我很難調用'notifyPropertyChange'。 – fguillen

+0

我有'[這裏一個twiddle](https://ember-twiddle.com/cf5cf506bf4f10557480f18e824cf700?openFiles=controllers.application.js%2C)我在哪裏使用'ArrayProxy'和'set'和'get'的所有電池嘗試強制Ember作出隱含的更改通知,但如果我對顯式通知發表評論,則不起作用:/ – fguillen