backbone.js 取消在集合中创建模型,避免重复

uyto3xhc  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(126)

需要创建一个处理程序,该处理程序不给予创建副本。

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(); }

但不工作。

kr98yfug

kr98yfug1#

有很多方法可以做到这一点:)
首先,您可以在添加之前简单地进行检查!然后就不需要担心使用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开始的时候,这才起作用......
如果您需要 idchanel 都是唯一的,那么我只需要按照您的建议在添加之前做一个检查,然后继续我的工作+显然在服务器端添加相同的唯一性条件,因为您永远不知道+不允许用户在GUI中以任何方式选择相同的值两次(从select/dropdown/autocomplete中删除值,无论如何)。

相关问题