2015-04-30 150 views
0

我一直在尝试几个小时,没有运气。如果你可以看到图像,我有一个温和复杂的模型。图像取自调试中的Chrome。Backbone.js删除模型

我需要从集合中删除模型,也我需要能够更改骨干将射击它的ajax删除的URL。因此,本质上,这是我的模型结构:

attributes: 
    favorites { 
     bookmarkedArticles: [{id: 123123},{id: ...}], 
     bookedmarkedSearches: [{}], 
     dispatchesMailds: [] 
    } 

如何删除ID为123123的书签文章中的模型?

我已经试过这样:

var model = new metaModel(
       { 
        favourites: { 
         bookmarkedArticles: { 
          id: "123123" 
         } 

        } 
       } 
     ); 
model.destroy(); 

也是这个

aamodel.headerData.collection.remove(model); 

没有成功可言。

Model image from Chrome Debug

+1

_没有成功._ ...那究竟意味着什么?任何错误消息?需要销毁哪个网址?请更具体一点。 – Exinferis

回答

1

提供不给予了很多的细节,但我会尽力的信息来回答考虑两种方案:

选项A: 您试图删除具有集合中的一个模型bookmarkedArticle.id = “123123”。如果是这种情况,并考虑书签文章它只是一个对象数组,我会建议使用下划线方法filter过滤集合,然后删除过滤器返回的模型。

var id = 123123; 
var modelsToDelete = aamodel.headerData.collection.filter(function(model){ 
    // find in the bookmarked articles 
    return _.find(model.get('bookmarkedArticles'), function(ba){ 
     return (ba.id === id); 
    }); 
}); 
_.each(modelsToDelete, function(model){ 
    model.destroy(); 
}); 

选项2:如果你想删除只使用“毁灭”的方法,firstable你必须“bookmarkedArticles”转换为Backbone.Collection,因为它是关联到你的主力机型书签的文章“123123”只是对象数组,有一些工具,用于骨干网,可以让你做到这一点很容易:

https://github.com/blittle/backbone-nested-models

但默认情况下,这是不可能的,那么,如果你想删除“bookmarkedArticle”你可以创建Backbone.Model然后使用方法destroy。例如:

var BookmarkedArticle = Backbone.Model.extend({ 
    url: function(){ 
    return '/bookmarkArticle/' + this.id; 
    } 
}); 

new BookmarkedArticle({"id": "123123","master": "5",...}).destroy(); 

希望这些信息很有用,并提供一些指导来解决您的问题。