我有一个绑定(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/

07-28 03:17
查看更多