需要创建一个处理程序,该处理程序不给予创建副本。
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});
我都准备好了尝试在处理程序中写一些这样的东西:
if( this.where({ chanel : model.get('chanel').length } ) { model.destroy(); }
但不工作。
1条答案
按热度按时间kr98yfug1#
有很多方法可以做到这一点:)
首先,您可以在添加之前简单地进行检查!然后就不需要担心使用Collection.remove()或Model.destroy()
顺便说一句,这里您可能希望使用Collection.remove()而不是Model.destroy(),因为新添加的Model似乎没有id,因此不需要可能的服务器往返。
第二,你的处理程序似乎有一些问题。.where()将返回一个数组,所以你需要检查返回值的.length,看看它是否〉0。或者你可以使用上面的findWhere,它将执行与where相同的操作,但返回数组的第一个值,所以你不需要担心执行[0]来到达那个模型。
如果没有更多的细节,很难说什么是你想要实现的最好的方法,但是看起来你正在使用 chanel 作为一种唯一的ID......那么为什么不使用idAttribute属性让Backbone知道这是以一种唯一的方式定义你的模型的呢?显然,只有当你没有真实的ID开始的时候,这才起作用......
如果您需要 id 和 chanel 都是唯一的,那么我只需要按照您的建议在添加之前做一个检查,然后继续我的工作+显然在服务器端添加相同的唯一性条件,因为您永远不知道+不允许用户在GUI中以任何方式选择相同的值两次(从select/dropdown/autocomplete中删除值,无论如何)。