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};}…}
无法测试此解决方案,但希望它能工作!