backbone.js复杂模型

backbone.js complex model

本文关键字:模型 复杂 js backbone      更新时间:2023-09-26

我正在使用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. 或者简单地为子对象创建模型,而不用担心嵌套并添加某种类型的引用

建议不胜感激。

我现在也在努力。

我倾向于选择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处理取消嵌套、创建和向集合添加项,然后将这些项存储为该模型上的属性。