按属性排序
Sort by attributes Backbone.js
我正在尝试对集合进行排序,然后用排序的集合更新视图。我正在尝试的是按完成或未完成的任务对待办事项列表进行排序。在我的集合视图中,我有这个方法:
var AddTask = Backbone.View.extend({
el: '#todos',
initialize: function(){
this.collection.fetch();
},
events: {
'click #add': 'addTask',
'click #filter_done': 'sort_done',
'keypress #inputTask': 'updateOnEnter'
},
addTask: function(){
var taskTitle = $('#inputTask'). val();
$('#inputTask').val(""); //clear the input
if($.trim(taskTitle) === ''){//check if the input has some text in it
this.displayMessage("Todo's can not be empty");
}else{
var task = new Task( {title: taskTitle} ); // create the task model
this.collection.create(task); //add the model to the collection
}
},
displayMessage: function(msg){
$('#inputTask').focus().attr("placeholder", msg);
},
updateOnEnter: function(e){
if(e.keyCode === 13){
this.addTask();
}
},
sort_done: function(){
var done = this.collection.where({done: true});
}
});
var addTask = new AddTask( {collection: tasks} );
我的问题是,我不知道如何要求视图呈现由sort_done
方法返回的值,我也不想失去原始集合中包含的任何信息。
一种方法是在集合上设置一个comparator
,然后在集合的'sort'
事件上重新渲染你的视图。
initialize: function() {
// ...
this.collection.on('sort', this.render, this);
},
sort_done: function() {
this.collection.comparator = function(model) {
return model.get('done') ? 1 : -1;
};
// This will trigger a 'sort' event on the collection
this.collection.sort();
}
这种方法的一个缺点是,如果集合在视图之间共享,这将影响集合的所有视图
相关文章:
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- row.entity.xxxx属性doensn'排序后不匹配
- 按子属性(可能缺少)对对象的 javascript 数组进行排序
- 按多个属性对多维数组进行排序
- jQuery TinySort按数据属性排序和放置
- AngularJS使用对象属性排序多个对象数组
- 按属性对数组排序
- 如何使用第二个数组中对象的相关属性对对象数组进行排序
- 按属性对对象数组进行排序
- jQueryUI可拖动+可排序错误(无法读取未定义的属性'选项')
- Javascript:使用value属性对关联数组进行排序,而不转换为对象数组
- 为未排序列表设置onclick()属性
- 根据三个模型属性对主干集合进行排序
- 无法读取属性“”;匹配“;(嵌套排序)
- 排序属性由于某种原因不起作用
- 设置排序属性时无法清除数组控制器
- MongoDB多个排序属性:如何确定优先级
- 获取HTML而不重新排序属性
- 用不同的模型排序'属性烬
- 如果Dgrid的id以数字开头,则Dgrid列调整大小,隐藏,重新排序属性会产生错误