2

コレクションにモデルを追加した後、データを並べ替えられるようにしたい。適用しない場合silent:true、コレクションはレンダリングされますが、すべてが2倍になります。別の方法はありますか?

初期化関数でテンプレートをレンダリングし、リセット後にコレクションサブビューをレンダリングしています。

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要素がクリアされず、さらに要素を追加して、 2回レンダリングされるコレクションモデル。これが私の解決策です。

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

このようにして、すでに占有されているDOMをクリアして、新しいアイテム(ソートされたアイテム)がレンダリングされるようにします。

于 2012-05-22T09:05:00.713 に答える