gpt4 book ai didi

arrays - 对ArrayController的内容进行排序

转载 作者:行者123 更新时间:2023-12-03 07:16:35 25 4
gpt4 key购买 nike

我有一个 Ember.ArrayController,其中包含未排序的内容。

我想知道是否可以在不使用新属性的情况下对 ArrayController 的内容进行排序。

我当然可以创建一个新属性:

App.MyArrayController = Em.ArrayController.extend({
mySortMethod: function(obj1, obj2) {
// some code here
},
updateSortedContent: function() {
var content = this.get('content');
if (content) {
var sortedContent = content.copy();
sortedContent.sort(this.mySortMethod);
this.set('sortedContent', sortedContent);
}
}.observes('content')
});

但我希望有更好的方法,不重复内容。

最佳答案

更新

最新版本的 Ember 实际上内置了排序功能。ArrayController 现在包含 Ember.SortableMixin,如果您指定 sortProperties( Array)和可选的 sortAscending ( bool 值)。

注意:使用新的 SortableMixin,您仍然需要引用 arrangedContent 来获取排序版本。模型本身将保持不变。 (感谢乔纳森·特兰)

App.userController = Ember.ArrayController.create({
content: [],
sortProperties: ['age'],
sortAscending: false
})

原始答案

正确的方法是使用 ArrayProxy 的 arrangedContent 属性。此属性旨在被重写以提供内容数组的排序或过滤版本。

App.userController = Ember.ArrayController.create({
content: [],
sort: "desc",
arrangedContent: Ember.computed("content", function() {
var content, sortedContent;
content = this.get("content");
if (content) {
if (this.get("sort") === "desc") {
this.set("sort", "asc");
sortedContent = content.sort(function(a, b) {
return a.get("age") - b.get("age");
});
} else {
this.set("sort", "desc");
sortedContent = content.sort(function(a, b) {
return b.get("age") - a.get("age");
});
}
return sortedContent;
} else {
return null;
}
}).cacheable()
});

关于arrays - 对ArrayController的内容进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10498969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com