2012-02-03 114 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