2012-03-18 60 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