0

バックボーン コレクションがあり、コレクションにデータを入力するメソッドを作成したいと考えています。私が見つけたのは push メソッドですが、これにはすべてのアイテムを反復処理する必要があります:

define([
    ...
], function($, _, Backbone, imagesCollection, imageTemplate, gridView) {
    var AppView = Backbone.View.extend({
        el: '#container',
        template: _.template( imageTemplate ),
        events: {
            'click #search': 'search'
        },
        initialize: function() {
            this.input = this.$('#search-term');
        },
        populate: function(data) {
                for (var i=0;i<data.length;i++) {
                    imagesCollection.push(data[i]);
                }
                //IS THERE ANY WAY TO PREVENT ITERATING OVER ALL THE ITEMS?
        },
        search: function() {
            $.ajax({
                type: 'get',
                url: myurl,
                dataType:'jsonp',
                success: function(response){
                    populate(response);
                }
            });
        }
    });

    return AppView;
});

他の解決策はありますか?私はバックボーンに慣れていないので、何か間違っていることがあれば教えてください。

4

2 に答える 2

5

自分のコードで繰り返し処理せずにバックボーン コレクションにデータを入力するには、少なくとも 2 つの方法があります。

addメソッド(渡したモデルを追加します)

populate: function(data) {
    imagesCollection.add(data); // old models will be preserved
}

メソッドreset (コレクション内のすべてのモデルを、提供した新しいモデルに置き換えます)

populate: function(data) {
    imagesCollection.reset(data); // new models will erase the old ones
}

http://backbonejs.org/#Collection-resetおよびhttp://backbonejs.org/#Collection-addを参照してください。

于 2012-10-23T14:04:22.193 に答える
1

モデルを追加するメソッドが必要なようです。これを行う最も柔軟な方法は、必要なオプションを渡して、コレクションの既存のsetメソッドを使用することです。

populate: function(data, options) {
    imagesCollection.set(data, options);
}

setのオプションを使用すると、すでにコレクション内にあるモデルに何が起こるかを制御できます (たとえば populate を再度呼び出す場合)。主なオプションは次のとおりです: {add: false}{remove: false}、または{merge: false}- http://backbonejs.org/#Collection-setを参照-既存のモデルのみを更新する ( {add:false})、新しいモデルを更新して追加する ( {remove: false})。デフォルトは{merge: true}、データ配列を介して渡された、追加するモデルにマージされるものです。

オプションなしでresetメソッドを使用することもできます。これは柔軟性に欠けますが、コレクションの既存のモデルをクリアして、渡す新しいモデルを追加するだけの場合は、最も簡単な方法です。新しいモデルごとに「追加」イベントを発生させないという点でsetとは異なります。それが追加されます。ビューがどのように機能するかによって、これが有益である場合とそうでない場合があります。

検索機能を作成しているように見えることを考えると、setを使用して起動される増分の追加/削除イベントは、結果ビューを動的に更新するのに役立つ場合があります (コレクションの追加および削除イベントをリッスンできます)。バックボーン コレクションには、一連のコレクションの変更ごとに 1 回だけ発生する 'update' イベントもあり、これはsetまたはaddによって発生し、ビューで再レンダリングを発生させるために使用できます。

于 2015-12-29T14:40:25.733 に答える