2

我希望能够在将模型添加到集合后对数据进行排序。如果我不应用silent:true集合将被渲染,但一切都会加倍。还有其他方法吗?

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

4

2 回答 2

2

只需实现一个比较器:

Backbone.Collection.extend({

    // ...

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

    // ...

});
于 2014-06-23T18:43:02.983 回答
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 元素的正常呈现,但是如果我使用最终触发重置的排序,我的函数不包含上面的代码,因此结果是它不会清除 DOM 元素并继续添加更多元素导致集合模型被渲染两次。所以这是我的解决方案。

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

通过这种方式,我清除了已经占用的 DOM,以便为要呈现的新项目(排序项目)让路。

于 2012-05-22T09:05:00.713 回答