arrays - 对ArrayController的内容进行排序

标签 arrays sorting ember.js

我有一个 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/

相关文章:

algorithm - 是否需要时间复杂度为 O(n) 的更好的排序算法?

javascript - 如何在 ember-cli 中使用 New Relic?

javascript - 从服务器文本动态构建 Ember 组件

c - 使用 fgets && sscanf 从数组中读取

c# - 无法弄清楚如何将数字从文件复制到数组

javascript - JavaScript 中的回文

ember.js - 使用 JS apply() 的 Ember 计算属性

javascript - 提醒数组内的数据细节

python - 如何在指数大列表中找到第 k 个最大元素?

python - 排名聚合: Merge local subrankings into global ranking