backbone.js复杂模型

时间:2012-02-03 20:45:59

标签: javascript json backbone.js

我正在使用backbone.js作为MVC框架构建一个Web应用程序。我正在努力设计我的模型。我有一个父/主对象,但它本质上非常复杂/嵌套,即超过50个属性和一些嵌套。我正在努力的是:<​​/ p>

我有类似的东西:

    {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. 或者只是为子对象创建模型而不用担心嵌套并添加某种类型的引用
  4. 建议表示赞赏。

1 个答案:

答案 0 :(得分: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处理去嵌套和创建项目并将其添加到集合中,然后将其存储为该模型上的属性。