5

で呼び出されるCollectionApp.listingListがあります。fetch()add:true

App.listingList.fetch({
        data: {some:data},
        processData: true,
        add: true
});

問題:既存のモデルのビューを再レンダリングせずに、新しく追加されたモデルのビューをレンダリングするにはどうすればよいですか。これは、私ができないことを意味します:

this.collection.each( function(listing, index) {
    new ListingMarkerView({ model:listing }).render();
}, this);

試み #1

コレクションのaddイベントでビューをレンダリングすると、新しいモデルにアクセスしてレンダリングする方法がわかりません

ListingListView = Backbone.View.extend({

    initialize: function() {
        this.collection.bind('add', this.renderNew, this);
    },

    render: function() {
        console.log('render ListingListView');
        this.collection.each( function(listing, index) {
            new ListingMarkerView({ model:listing }).render();
        }, this);
        return this;
    },

    renderNew: function() {
        // How do I grab the new models?
        new ListingMarkerView({ model:listing }).render(); // wont work
        return this;
    }
});

試み #2

後続のfetchon を実行し、underscore.js を使用して両方のコレクションのモデルを比較するために2 番目の Collection を使用しようとし_.without()ましたが、返された配列には、パラメーターとして渡された 2 番目の配列で見つかった要素がまだ含まれています。Using_difference()は、最初の配列として渡されたものと同じ配列も返しました。

App.listingListNew.fetch({
        data: {some:data},
        processData: true,
        success: function() {
            console.log(App.listingListNew.models);
            console.log(App.listingList.models);
            console.log(_.without(App.listingListNew.models, App.listingList.models));
            console.log(_.difference(App.listingListNew.models, App.listingList.models));
        }
});

console.log出力

と に 2 つの同一の配列を渡したので_.difference()_.without()出力は になります[]。しかし、そうではありません :/cidが異なるため、それらのすべてが一意として扱われるのでしょうか?

ここに画像の説明を入力

4

2 に答える 2

5

a を実行するcollection.bind('add', this.renderNew, this);と、追加されたモデルが引数としてメソッドに自動的に渡されます。

メソッドに引数を含めると、新しいモデルにアクセスできるようになります。

renderNew: function(newModel) {
    new ListingMarkerView({ model:newModel }).render();
    return this;
}
于 2012-09-29T20:24:01.420 に答える