2

イベント内のモデルaddが で取得されたのcollection.fetchか、作成されたのかを確認する必要がありますcollection.create。出来ますか?

collection.on('add', onModelAdded)
collection.fetch()
collection.create({})

function onModelAdded(model, collection, options) {
   // created or fetched?
}
4

2 に答える 2

2

createこのオーバーライドのようなものがうまくいくと思います:

create: function(attributes, options) {
    options = options || { };
    options.came_from_create = true;
    return Backbone.Collection.prototype.create.call(this, attributes, options);
}

came_from_create次に、コールバックで次を探すことができます。

function onModelAdded(model, collection, options) {
    if(options && options.came_from_create) {
        // We started in a create call on the collection.
    }
    else {
        // We came from somewhere else.
    }
}

Backbone が使用したいオプション名を使用しないように注意している場合は、通常、options引数を使用してデータの一部をピギー バックできます。

于 2013-10-15T21:06:14.310 に答える
0

バックボーンドキュメントから

新しく追加されました

このモデルはサーバーに保存されていますか? モデルがまだ ID を持っていない場合、それは新しいと見なされます。

バックボーン ソース:

isNew: function() {
   return this.id == null;
},

ID を設定せずにモデルを作成する場合、それは新しいモデル (ID のないモデルは新規と見なされる) であるため、model.isNew()true を返します。

function onModelAdded(model, collection, options) {
   if(model.isNew()){
       // It's created
   }else{
       // It's fetched!
   }
}
于 2013-10-15T20:49:46.483 に答える