2012-02-08 61 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數組。