【问题标题】:Ember sort an enumerable array or add an new object to a regular arrayEmber 对可枚举数组进行排序或将新对象添加到常规数组
【发布时间】:2014-08-03 00:19:52
【问题描述】:

我有一个待办事项列表。
主模板有一个用于输入新待办事项的输入和一个出口。
出口用于显示每个待办事项的 todos.index 模板。我使用 jquery 可排序使它们成为 srtable。我使用模型属性对它们进行排序。

待办事项路线:

 model: function(){
        return this.store.filter("todo", {}, function(todo){
            if(todo.get("user") !== null && parseInt(todo.get("user").get("id")) === user_id)
                return todo;
        });

tod​​os 索引路由:

model: function(){
    return this.modelFor('todos').sortBy('idx');
}

控制器:

App.TodosController = Ember.ArrayController.extend();    

App.TodosIndexController = Ember.ObjectController.extend();   

但是当我添加这个 .sortBy() 方法时,我返回的对象数组不再存在,并且我创建的任何新 todos 都没有添加到模板中。 (它们确实被创建并且在 ember 数据和我的数据库中,但它们只是没有被添加到模板中) - 当您执行 sortBy 时,ember 数据的实时数组被复制到不可变的常规数组中。
如果我省略 sortBy() 我的新对象会很好地填充我的模板。

关于如何对数组进行排序但保持其可枚举或如何刷新模板的任何想法?

sortProperties 不工作 - 我不知道为什么。我的待办事项列表由 objectController 填充。

编辑 -

我的问题是我自己的错。我以为我有这个

 App.TodosIndexController= Ember.ObjectController.extend();    

但我真正拥有的是:

 App.TodoController = Ember.ObjectController.extend();    

这让我没有明确的控制器来为我进行排序,所以对我来说解决方案是创建一个新的 arrayController:

 App.TodosIndexController= Ember.ObjectController.extend();    

并使用它来进行排序。虽然这不是我问题的解决方案,但我的问题是我自己的遗忘,这是对项目进行排序的正确方法,所以我将@Kingpins 的答案标记为正确。

【问题讨论】:

    标签: javascript jquery arrays sorting ember.js


    【解决方案1】:

    使您的控制器排序,并在您的模板中迭代控制器(而不是模型)。

    App.TodosIndexController = Ember.ArrayController.extend({
      sortProperties: ['idx'],
      sortAscending: true
    });
    

    将您的模型返回到 modelFor

    model: function(){
        return this.modelFor('todos');
    }
    

    或者你可以在控制器上创建一个计算属性并观察模型的更新,更新计算属性

    App.TodosIndexController = Ember.ArrayController.extend({
      sortedTodos: function(){
        return this.get('model').sortBy('idx');
      }.('model.[]')
    });
    

    再次,将您的模型返回到 modelFor

    model: function(){
        return this.modelFor('todos');
    }
    

    另一种手动更新模板的方法是获取TodosIndexController 的模型并手动使用pushObject 将新的待办事项添加到其中。它只是一个项目数组。

    【讨论】:

    • 现在无法访问代码,稍后会尝试,但对于选项一 - 这不起作用。 sortProperties 不是排序。我想现在看它我不太清楚我有什么。我认为这可能是我建立模型的方式。有一个 TodosController 是一个 ArrayController 和一个 TodosIndexController 是一个对象控制器。 arraycontroller 的路由通过 userid 等获取模型和过滤器,然后 objectController 路由是 modelsFor('todos') ,它是(父)arrayController。模型正在索引模板中加载
    • 然后这个模板被插入到 todos 模板中。但我认为因为它们已经加载到索引模板中,所以 arrayController 中的 sortProperties 没有影响。
    • 第二个选项看起来很有希望,稍后我会试一试——我也有想法,我应该在 Index 路由中调用模型,然后 sortProperties 可能在 objectController 中工作。不知道这是否都清楚,但...谢谢我感谢您的建议
    • 是的,我迷路了。 sortProperties 仅适用于数组控制器,而 sortBy 应仅适用于集合/数组。我不确定我是否理解您使用对象控制器的原因(数据不是集合吗?)
    • 是的,所以我使用 Ember-cli 和命名约定以及我解决这个问题的方式让我感到困惑。解决方案很明显。我没有TodosIndexController。我以为我做到了,它是对象控制器,但我没有,我有一个 TodosController 和一个 TodoController 所以一旦我创建了我就可以使用 sortProperties
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    相关资源
    最近更新 更多