Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 是否可能知道是哪一个触发了收集';s添加事件:获取还是创建调用?_Backbone.js_Backbone Events_Backbone.js Collections - Fatal编程技术网

Backbone.js 是否可能知道是哪一个触发了收集';s添加事件:获取还是创建调用?

Backbone.js 是否可能知道是哪一个触发了收集';s添加事件:获取还是创建调用?,backbone.js,backbone-events,backbone.js-collections,Backbone.js,Backbone Events,Backbone.js Collections,我需要知道add事件中的模型是通过collection.fetch检索的还是由collection.create创建的。可能吗 collection.on('add', onModelAdded) collection.fetch() collection.create({}) function onModelAdded(model, collection, options) { // created or fetched? } 从 是新的 此模型是否已保存到服务器?如果 模型还没有i

我需要知道
add
事件中的模型是通过
collection.fetch
检索的还是由
collection.create创建的。可能吗

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

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

是新的

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

我猜像这样的
create
override会起作用:

create: function(attributes, options) {
    options = options || { };
    options.came_from_create = true;
    return Backbone.Collection.prototype.create.call(this, attributes, options);
}
然后,您可以在回调中查找来自创建的

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.
    }
}

如果小心不要使用主干网想要使用的任何选项名称,通常可以使用
options
参数来携带周围的数据位。

您是否尝试过覆盖
create
以通过
options
携带某些内容?@muistooshort不错的主意,正在尝试立即实施。@muistooshort它成功了,谢谢。请发布一个答案,我将接受它。感谢
应用
->
调用
修复程序,我总是把这两个问题搞得很混乱,以至于我在MDN上实际上有一个提醒:)不幸的是,我不能依赖于此,因为我可能有
{wait:true}
。另一个想法是设置一个标志(通过重写主干创建方法)在model save complete取消设置标志后,
create:function(model,collection){…if(options.wait){model.createdNew=true;model.once('sync',function(){delete this.createdNew};}…}
无法测试此解决方案,但希望它能工作!