在骨干集合中添加模型后自动排序

时间:2012-05-22 08:51:14

标签: backbone.js

我希望能够在将模型添加到集合后对数据进行排序。如果我不申请silent:true,那么该集合将被渲染,但所有内容都会翻倍。还有另一种方式吗?

我在初始化函数上渲染模板,并在重置后渲染集合子视图。

2 个答案:

答案 0 :(得分:2)

只需实施一个比较器:

Backbone.Collection.extend({

    // ...

    comparator: function( doc ) 
    {
        var str = doc.get('name') || '';
        return str.toLowerCase();
    },

    // ...

});

答案 1 :(得分:1)

让它工作虽然我会回答我的问题,因为我不确定这是否是最佳答案,所以欢迎评论。

在我看来:

    initialize : function(){
        this.$el.html( this._template );
        this.collection.bind('reset', this.LoadItems, this);
        this.collection.bind('add', this.AddOneItem, this);
        $("#settings-category").trigger("create");  
    },

    LoadItems : function(){
        this.collection.each(function(model){
            this.view = new CurrentCategoryView({model : model});
             $("#currentCategoryListContainer").append(this.view.render().el);
        });
        $("#currentCategoryListContainer").listview("refresh");
    },

这导致DOM元素的正常呈现,但如果我使用sort最终触发重置,我的函数不包含上面的代码,结果是它没有清除DOM元素并继续添加更多导致Collection模型呈现两次的元素。所以这是我的解决方案。

$("#currentCategoryListContainer").empty();
this.collection.sort();

通过这种方式,我清除已经占用的DOM,为要呈现的新项目(已排序项目)腾出空间。