我有一个待办事项清单 主模板有输入新的待机和插座的输入 插座用于显示每个待办事项的todos.index模板。我已经使用jquery sortable使它们变为srtable。我使用模型属性对它们进行排序。
todos route:
model: function(){
return this.store.filter("todo", {}, function(todo){
if(todo.get("user") !== null && parseInt(todo.get("user").get("id")) === user_id)
return todo;
});
todos index route:
model: function(){
return this.modelFor('todos').sortBy('idx');
}
控制器:
App.TodosController = Ember.ArrayController.extend();
App.TodosIndexController = Ember.ObjectController.extend();
但是当我添加这个.sortBy()方法时,我返回的对象数组不再存在,我创建的任何新待办事项都没有添加到模板中。 (它们确实被创建并且在ember数据和我的数据库中,但它们只是没有添加到模板中) - 当你进行sortBy时,实时数组的ember数据被复制到一个不可改变的常规数组中。
如果我省略sortBy(),我的新对象就可以填充我的模板了。
关于如何对数组进行排序但保持其数据或如何刷新模板的任何想法?
sortProperties不起作用 - 我不知道为什么。我的todos列表由objectController填充。
编辑 -
我的问题是我自己的错。我以为我有这个
App.TodosIndexController= Ember.ObjectController.extend();
但我实际拥有的是:
App.TodoController = Ember.ObjectController.extend();
这让我没有明确的控制器为我做排序,所以对我来说解决方案是创建一个新的arrayController:
App.TodosIndexController= Ember.ObjectController.extend();
并使用它来进行排序。虽然它不是我的问题的解决方案,但我的问题是我自己的遗忘,这是对项目进行排序的正确方法,所以我要将@Kingpins的答案标记为正确。
答案 0 :(得分: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
向其中添加新的待办事项。它只是一系列项目。