2012-03-18 76 views
3

我在我的ArrayController中存儲了搜索項的列表。我希望搜索字詞顯示爲最新到最舊。默認情況下,Ember按順序輸出它們。顛倒內容數組

你可以看到我目前的執行在這裏:http://andymatthews.net/code/emberTweets/

而這裏的相關代碼。

{{#each App.recentUsersArray.reverse}} 
    <li> 
     <a href="#" title="view again" {{action "searchAgain" target="App.recentUsersArray"}}>{{this}}</a> 
    </li> 
{{/each}} 

App.recentUsersArray = Em.ArrayController.create({ 
    content: [], 
    reverse: function(){ 
     return this.content.reverse(); 
    }.property(), 
}); 

你可以看到我試圖使用property()方法將其逆轉,但它不起作用。難道我做錯了什麼?

回答

6

您應始終使用getset來訪問屬性。另外,如果計算屬性取決於其他屬性,則必須在property聲明中添加這些屬性。在下一個版本的餘燼中可以省略cacheable的使用,請參閱discussion。你可以看到一個工作示例here

reverse: function(){ 
    return this.get('content').toArray().reverse(); 
}.property('[email protected]').cacheable() 

也可以使用一個陣列上的unshiftObject方法和在此規避創建一個計算屬性,參見http://jsfiddle.net/ez7bV/

+1

我知道這是舊的,但reverseObjects()可用,它的工作原理與reverse()類似,但是符合KVO。 – skaterdav85 2015-11-06 21:40:44

+0

'reverseObjects'似乎是這樣做的有福之道:http://emberjs.com/api/classes/Ember.MutableArray.html#method_reverseObjects。請注意,它是'Ember.MutableArray'的一部分。 – 2016-03-02 18:07:16