需要创建一个处理程序,它不会给创建副本。
Collection = Backbone.Collection.extend({
model : Model,
initialize : function() {
this.on('add', this.actionCreate, this);
},
actionCreate : function(model, collection, param) {
// handler...
}
});
collection = new Collection();
collection.add({ chanel : 'starladder' });
// Should not be created because the parameter 'chanel' already exists with this value
collection.add({ chanel : 'starladder});
我准备尝试处理程序写somsing如:
if( this.where({ chanel : model.get('chanel').length } ) { model.destroy(); }
但没有工作。
答案 0 :(得分:0)
有很多方法可以解决这个问题:)
首先,您可以在添加之前进行检查!然后无需担心使用Collection.remove()或Model.destroy()
if(!this.collection.findWhere({chanel: 'starladder'}))
...add...
作为旁注,这里你可能想要Collection.remove()而不是Model.destroy()因为你新添加的Model似乎没有id,所以不需要可能的服务器往返
其次,您的处理程序似乎有一些问题。 .where()将返回一个数组,因此你需要检查返回值的.length以查看它是否是> 0.或者您可以使用上面的findWhere,它将执行与where相同但返回该数组的第一个值,因此您不必担心执行[0]来获取该模型。
如果没有更多细节,很难说出你想要实现的最佳方式是什么,但似乎你正在使用 chanel 作为一种独特的ID ......?那么为什么不使用idAttribute属性让Backbone知道这是以独特方式定义模型的呢?显然,这只有在您没有真正的ID开始时才有效...
如果你需要 id 和 chanel 都是唯一的,那么我只是在你提出的添加之前做一个检查并在我的路上+显然添加服务器端的相同唯一性条件,因为您永远不会知道+不允许用户在GUI中以任何方式选择相同的值两次(从select / dropdown / autocomplete中移除值,等等)。