【问题标题】:Sort Ember Array on first load only仅在首次加载时对 Ember 数组进行排序
【发布时间】:2015-05-27 01:57:29
【问题描述】:

我有一个包含许多孩子的表格,我想按字母顺序排序。

为此,我在计算属性上使用了 Array Proxy 和 SortableMixin,我遇到的问题是,当将新项目添加到观察到的属性时,集合再次自行排序。

我希望在第一次加载时对集合进行排序,然后再不对集合进行排序。

这是当前设置的 jsbin 示例,如果您单击添加新项目,则会将新项目添加到集合中,一旦您开始输入新项目的输入,集合就会重新排序,这并不理想。

http://emberjs.jsbin.com/sedexequni/2/edit

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    只需事先在模型上进行排序。

    App.IndexRoute = Ember.Route.extend({
      model: function(){
        return Ember.Object.create({
          colours:[Ember.Object.create({colour:'red'}), Ember.Object.create({colour:'yello'}), Ember.Object.create({colour:'blue'}), Ember.Object.create({colour:'green'}), Ember.Object.create({colour:'orange'})]
        });
      },
      afterModel: function(model, transition){
         // this will force the collection to populate before 
         // setupController (really applies to async relationship, but whatever)
         // returned promises will block until resolved.
         return model.get('colours'); 
      },
      setupController: function(controller, model){
        var colours = model.get('colours'),
            sort = colours.toArray().sortBy('colour');
        colours.clear();
        colours.pushObjects(sort);
        this._super(controller, model);
      }
    });
    

    http://emberjs.jsbin.com/kosanixame/1/edit

    【讨论】:

    • 好吧,也许我的例子太简单了——模型来自 Ember 数据存储——所以我不能按照你的例子将集合重新分配给排序版本。
    • 关系是异步的吗?
    • 是的,关系是异步的。
    • 强制填充颜色,清除集合,重新填充排序的集合。
    猜你喜欢
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多