2012-02-03 153 views
2

我正在構建一個web應用程序,使用backbone.js作爲MVC框架。我正在努力設計我的模型。我有一個父/主對象,但它本質上相當複雜/嵌套,即超過50個屬性和一些嵌套繼續進行。我所掙扎的是:backbone.js複雜模型

我有類似:

{section1:{ 
     key1:"value1", 
     key1:"value2"}, 
    section2:{ 
     key1:"value1", 
     key1:"value2"} 
    } 

我應該扁平化的對象出像:

{section1_key1:"value1", 
    section1_key2:"value2", 
    section2_key1:"value1", 
    section2_key2:"value2" 
    } 

,或者我應該:

  1. 使用骨幹嵌套插件並傳入大型嵌套JSON對象?
  2. 或爲每個部分創建單獨的模型,並以某種方式嵌套在父模型 中。
  3. 或簡單地創建的子對象的模型,而不必擔心嵌套,並添加一些類型的引用

建議表示讚賞。

+1

此外,這從常見問題解答:http://documentcloud.github.com/backbone/#FAQ-nested – tkone 2012-02-03 21:56:40

回答

3

我現在正在爲此付出努力。

我傾向於選擇2.

我有每個內置分成不同的模型嵌套的區段,並創造

因此,考慮在Python類似的SQLObject(或任何真正的ORM)的接口一個簡單的博客文章的想法:

var Tag = Backbone.Model.extend({ 
    defaults: { 
     name: '' 
    }, 
    validate: function(atts){ 
     if(!atts.name || atts.name.length < 2){ 
      return "You must provide a name that's longer than 2 characters"; 
     } 
    } 
}); 

var TagList = Backbone.Collection.extend({ 
    model: Tag 
}) 

var Entry = Backbone.Model.extend({ 
    defaults: { 
     author: "Todd", 
     pub_date: new Date(), 
     content: "", 
     title: "", 
     tags: new TagList() 
    }, 
    add_tag: function(tag){ 
     var tag_collection = this.get('tags'); 
     tag_collection.add({name: tag}); 
     this.set({tags: tag_collection}); 
    }, 
    remove_tag: function(tag){ 
     tag.destroy(); 
    }, 
    tags: function(){ 
     return this.get('tags').models; 
    } 
}); 

另一種想法將讓initialize處理脫套和創建和添加項目的集合,然後存儲作爲該模型的屬性。

+0

在我的情況下,儘管大多數子對象/模型將是他們的父母一對一的關係。嵌套的原因是考慮屬性的剪切數量(50+)來降低複雜性。 – whyvez 2012-02-04 04:19:02