是否有可能知道哪一个触发了Collection的添加事件:获取或创建调用?

时间:2013-10-15 19:21:56

标签: backbone.js backbone-events backbone-collections

我需要判断add事件中的模型是使用collection.fetch检索还是由collection.create创建的。有可能吗?

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

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

2 个答案:

答案 0 :(得分: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参数来捎带数据。

答案 1 :(得分:0)

来自Backbone Docs

  

<强>是否新款

     

此模型是否已保存到服务器了?如果   该模型还没有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!
   }
}