2012-02-08 92 views
2

我工作的一个项目,我们有一个看起来基本上是这样的数据模型......Backbone.js的嵌套对象结构

var library = { 
    location: 'Somewhere' 
    books: [ 
    { 
     name: 'Good Book', 
     publisher: 'Great publisher' 
     authors: [ 
     { 
      name: 'Joe Schmoe', 
      age: '65' 
     }, 
     { 
      name: 'Robert Smith', 
      age: '47' 
     } 
    } 
} 

我试图找出摆出模型的最佳方式结构体。

喜欢的东西...

var LibraryModel = Backbone.Model.extend({}); 

var Book = Backbone.Model.extend({}); 
var Books = Backbone.Collection.extend({ 
    model: Book 
}); 

var Author = Backbone.Model.extend({}); 
var Authors = Backbone.Collection.extend({ 
    model: Author 
}); 

这是解决的最佳方式?有没有其他人面对这样的事情?

回答

6

无论您是否需要N到N,1到N或任何关系主要是后端问题,IMO。除非严格按照CRUD屏幕进行处理,否则骨干模型通常不会直接转换为后端模型,尽管它们通常接近后端模型。

这就是说,骨干关系无疑是处理这种情况的一个很好的选择。它为处理关系代码提供了一组非常强大的功能,值得期待。

如果您宁愿避开一个大插件,并且它与配置和需求相关,但您可以直接在模型中使用一些简单的技巧。既然你事先知道你的数据结构,你可以对你需要编写的代码做大量的假设,而不必像BB-Relational那样创建一个非常灵活的系统。


Book = Backbone.Model.extend({}); 
Books = Backbone.Collection.extend({ 
    model: Book 
}); 

Library = Backbone.Model.extend({ 
    initialize: function(){ 
    this.parseBooks(); 
    }, 

    parseBooks: function(){ 
    var data = this.get("books"); 
    this.unset("books", {silent: true}); 
    this.books = new Books(data); 
    } 
}); 

我用这个代码五六次,它的制定只是:

例如,获取书籍的列表到库,利用上述数据结构,可以作为一样简单每次都适合我。您可以将相同的模式和一组假设扩展到对象模型的每一层。

您可能还需要重写toJSON方法取决于型号:


Library = Backbone.Model.extend({ 
    // ... code from above, here 

    toJSON: function(){ 
    var json = Backbone.Model.prototype.toJSON.call(this); 
    json.books = this.books.toJSON(); 
    return json; 
    } 
}); 

根据您需要多远沿着这条路走,你将有可能最终的功能重新创建一半BB - 关系已经提供。使用像这样的插件可能更容易,如果您有足够大的结构,则可以使用声明性关系处理。

IMO,值得了解这些基本模式,在挖掘BB关系之前知道如何为自己做这件事。但是如果你受到时间的限制,我会从BB-Relational或其他一些关系映射器开始(我认为现在还有其他一些关系映射器)。

+0

这样做的任何特定原因。书=新书(数据);而不是this.set('books':new Books(data)); ? – jcreamer898 2012-02-08 19:47:25

2

我不会这样解决这个问题,因为你有N到N的关系, 1本书可以有多个作者 和1个作者最有可能写了1本以上的书。

我会看看Backbone Relational插件

它不是缺省的骨干,但它的伎俩我能想到的最好办法。

但是,如果您只需要一个小型解决方案 您可以将所有作者放在集合中,并在书籍模型中使用简单的作者ID数组。