首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone Relational:未触发删除事件

Backbone Relational:未触发删除事件
EN

Stack Overflow用户
提问于 2012-12-18 08:33:34
回答 1查看 617关注 0票数 0

我正在尝试使用Backbone Relational设置一对小模型,但我不明白remove事件是如何触发的。

以下是我的模型代码:

代码语言:javascript
复制
var Car = Backbone.RelationalModel.extend({
    idAttribute: "id"
});

var Cars = Backbone.Collection.extend({
    model: Car
});

var CarCollection = new Cars();

var User = Backbone.RelationalModel.extend({

    idAttribute: 'id',
    relations: [{
        type: Backbone.HasMany,
        key: 'model',
        relatedModel: Car,
        collectionType: Cars,
        includeInJSON: 'model',
        reverseRelation: {
            key: 'ownedBy',
            includeinJSON: 'name'
        }
    }]

  });

var Users = Backbone.Collection.extend({
    model: User
});

var UserCollection = new Users();

//Bootstrap data and put it in the collections

var carsData = [
    {id:1, model:'500',ownedBy:1},
    {id:2, model:'Corsa',ownedBy:2},
    {id:3, model:'Civic',ownedBy:2}
];

var usersData = [
    {id:1,name:'Dude'},
    {id:2,name:'Mark'}
];

CarCollection.add(carsData);
UserCollection.add(usersData);

在JSON中,我得到的是:

代码语言:javascript
复制
UserCollection = {"id":1,"name":"Dude","model":["500"]}{"id":2,"name":"Mark","model":["Corsa","Civic"]}

CarCollection = {"id":1,"model":"500","ownedBy":"Dude"}{"id":2,"model":"Corsa","ownedBy":"Mark"}{"id":3,"model":"Civic","ownedBy":"Mark"}

现在,如果我向CarCollection添加一个元素,如下所示:

代码语言:javascript
复制
CarCollection.add({id:4,model:'Prius',ownedBy:1};);

'add‘事件被激发,但如果我从集合中移除一个元素:

代码语言:javascript
复制
var el = CarCollection.get(1);
CarCollection.remove(el);

未触发任何事件。

我已经通过一些解决方法解决了这个问题,例如:

代码语言:javascript
复制
var el = CarCollection.get(1);
el.destroy();

或者直接在Backbone.store中取消注册:

代码语言:javascript
复制
Backbone.Relational.store.unregister(el);

或者只是将ownedBy设置为null:

代码语言:javascript
复制
var el = CarCollection.get(1);
el.set("ownedBy",null);

这是插件的正确行为吗?或者我以错误的方式配置了我的模型?感谢你的每一个回答。

EN

回答 1

Stack Overflow用户

发布于 2012-12-18 22:07:59

您必须将模型传递给remove,而不是索引

代码语言:javascript
复制
Collection.remove(model)

您可以执行以下操作:

代码语言:javascript
复制
CarCollection.remove(CarCollection.at(0));

要删除索引为0的模型,请执行以下操作...

代码语言:javascript
复制
CarCollection.remove(CarCollection.get(4));

删除id为4的模型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13924579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档