【问题标题】:backbone.js complex model骨干.js 复杂模型
【发布时间】:2012-02-26 11:03:03
【问题描述】:

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

我有类似的东西:

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

建议表示赞赏。

【问题讨论】:

标签: javascript json backbone.js


【解决方案1】:

我现在也在为此苦苦挣扎。

我倾向于选项 2。

我将每个嵌套部分构建到单独的模型中,并在 Python(或实际上任何 ORM)中创建类似于 SQLObject 的接口

所以给出一个简单的博客文章想法:

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 处理取消嵌套和创建以及将项目添加到集合中,然后将其作为属性存储在该模型上。

【讨论】:

  • 在我的情况下,尽管大多数子对象/模型与它们的父对象是一对一的关系。考虑到属性的剪切数量(50+),嵌套的原因是为了降低复杂性。
猜你喜欢
  • 2013-10-14
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 2015-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多