为什么/何时应该使用Backbone关系框架

时间:2013-08-21 05:44:13

标签: backbone.js backbone-relational backbone-model

我现在有一个混乱的状态,任何人都明白我的怀疑并提供有关http://backbonerelational.org/的更多详情吗?

基本上,

  1. 为什么我们使用关系

  2. 当我们需要决定使用

  3. 我们不能用Backone.js本身实现相同的目标..?

  4. 我有这种情况,我有这样的样本json:

    var navi = {
        "mainLinkLabel": "Home",
        "mainLinkHref": "/home.html",
        "sublinks": [
            {
                "sublinkLabel": "subHome1",
                "sublinkHref": "/home/home1.html"
            },
            {
                "sublinkLabel": "subHome2",
                "sublinkHref": "/home/home2.html"
            },
            {
                "sublinkLabel": "subHome3",
                "sublinkHref": "/home/home3.html"
            }
        ]
    }
    

    它有主链接和子链接:

    为此,我应该让模型像覆盖这两个信息一样:

    var bothModels =  Backbone.Model.extend({
    
        defautls:{
    
            "mainLinkLable" : "default Lable",
            "mainLinkHref"  : "#",
            "sublinks"      : [
                "sublinkLabel" : "default sublink",
                "sublinkHref"  : "#"
            ]
    
        }
    
    })
    

    或者我需要为每个模型制作单独的模型并使用Backbone-relational连接..像这样?

    var mainModel = Backbone.Model.extend({
        defautls:{
    
            "mainLinkLable" : "default Lable",
            "mainLinkHref"  : "#"
    
        }
    })
    
    var subModel = Backbone.Model.extend({
        defaults:{
                 "sublinkLabel" : "default sublink",
                 "sublinkHref"  : "#"
        }
    })
    

    如果是这样,我怎么能连接这两个模型..我会得到什么好处。我在互联网上搜索,找到一些简单的教程来理解这个..但我不能带来一些..

    任何人都要澄清这个场景吗??

    Here is the fiddle to play

2 个答案:

答案 0 :(得分:2)

我之前没有使用过Backbone关系。但我会构建结构,使用2个模型并在模型上使用parse方法并传递主要集合。

var navi = {
    "mainLinkLabel": "Home",
    "mainLinkHref": "/home.html",
    "sublinks": [{
        "sublinkLabel": "subHome1",
        "sublinkHref": "/home/home1.html"
    }, {
        "sublinkLabel": "subHome2",
        "sublinkHref": "/home/home2.html"
    }, {
        "sublinkLabel": "subHome3",
        "sublinkHref": "/home/home3.html"
    }]
};


var MainModel = Backbone.Model.extend({
    defauts: {
        "mainLinkLable": "default Lable",
        "mainLinkHref": "#"
    },
    parse: function(response) {
        if(response.sublinks) {
             this.subCollection = new SubCollection(response.sublinks || null, { parse: true });
        }
        delete response.sublinks;

        return response;
    }
})

var SubModel = Backbone.Model.extend({
    defaults: {
        "sublinkLabel": "default sublink",
        "sublinkHref": "#"
    }
});

var MainCollection = Backbone.Collection.extend({
    model: MainModel
});

var SubCollection = Backbone.Collection.extend({
    model: SubModel 
});

var mainCollection = new MainCollection(navi, {parse : true});

console.log(mainCollection);

<强> jsFiddle

因此,如果您想访问每个模型中的子链接集合。你只需要使用

this.subCollection会为您提供相关的收藏。

答案 1 :(得分:1)

Backbone.js不支持框中的嵌套模型。实际上,您处理的是嵌套模型:发票包含行,部分包含员工等。

你应该研究一下你的bussine模型,如果你有如上所述的嵌套模型,Backbone.Relational会帮助你。

您基本上无法使用Backbone.js本身存档,期望编写自己的自定义代码,以重载parse模型方法。我们在我工作的一个项目上做了这个,但是主要的经验教训是 - 使用时间推广的插件而不是自己的轮子重塑。 Backbone.Relational似乎是个不错的选择。