Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 在主干集合中添加模型后自动排序_Backbone.js - Fatal编程技术网

Backbone.js 在主干集合中添加模型后自动排序

Backbone.js 在主干集合中添加模型后自动排序,backbone.js,Backbone.js,我希望能够在向集合添加模型后对数据进行排序。如果我不应用silent:true集合将被渲染,但所有内容都会加倍。还有别的办法吗 我正在初始化函数上呈现模板,并在重置后呈现集合子视图。虽然我会回答我的问题,但它仍能正常工作,因为我不确定这是否是最佳答案,因此欢迎评论 我认为: initialize : function(){ this.$el.html( this._template ); this.collection.bind('reset', this

我希望能够在向集合添加模型后对数据进行排序。如果我不应用
silent:true
集合将被渲染,但所有内容都会加倍。还有别的办法吗


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

虽然我会回答我的问题,但它仍能正常工作,因为我不确定这是否是最佳答案,因此欢迎评论

我认为:

    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元素并继续添加更多元素,从而导致集合模型呈现两次。这就是我的解决方案

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

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

只需实现一个比较器:

Backbone.Collection.extend({

    // ...

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

    // ...

});

有些代码总是有帮助的,因此我们可以看到您以前尝试过的内容。@Dreyfus始终有
比较器
功能来保持您的模型始终处于排序状态。是的。但我的主要问题在于渲染部分。如果我有一个1,2,3的集合,如果我在不清除DOM的情况下使用sort,结果将是1,2,3,1,2,3,
DOM.empty()
的唯一问题是,用户会感觉到屏幕上的闪光,并且会丢失受此DOM删除影响的任何滚动位置。我遇到了同样的问题。有更好的解决办法吗?