我有一个绑定(bind)到已排序集合的bellyjs中的 View 。
我想用新模型定期更新集合,但要保持排序顺序。
在不完全呈现新模型的情况下将其插入 View 中的最佳方法是什么?
最佳答案
Collection.add触发“add”事件时,传递一个包含“index”属性的选项散列,该散列指定如果通过比较器对集合进行排序,则在何处插入该项。
使用jQuery的nth-child选择器,您可以在正确的位置插入项目:
$(function() {
var ships = new Backbone.Collection();
ships.comparator = function(ship) {
return ship.get("name");
};
ships.on("add", function(ship, collection, options) {
if (options.index === 0)
$('ul#list').prepend("<li>Ahoy " + ship.get("name") + " at " + options.index + "!</li>");
else
$('ul#list li:nth-child('+ options.index +')').after("<li>Ahoy " + ship.get("name") + " at " + options.index + "!</li>");
});
ships.add([
{name: "Flying Dutchman"},
{name: "Black Pearl"}
]);
ships.add({name: "Delaware"});
ships.add({name: "Carolina"});
ships.add({name: "America"});
})
实时示例:http://jsfiddle.net/DRN4C/6/