【问题标题】:Why / When I should use the Backbone-relational framework为什么/何时我应该使用主干关系框架
【发布时间】:2013-08-21 05:44:12
【问题描述】:

我现在很困惑,有没有人能解开我的疑惑并提供更多关于http://backbonerelational.org/的细节?

基本上,

  1. 我们为什么使用关系

  2. 当我们需要决定使用它时

  3. 难道我们不能用 Backone.js 本身实现同样的目标吗?

我有这种情况,我有这样的示例 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 个单独的模型。第一个模型将具有一个属性,该属性将再次成为集合子模型。通过这样做,您将子链接作为模型内的嵌套集合。这将允许所有依赖数据位于单个模型上,而不是模型外的单独集合
  • 听起来不错。你能告诉我或更新现场演示的小提琴吗..这里没有骨干关系的工作..?

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


【解决方案1】:

我以前没有使用过 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 会给你有问题的集合。

【讨论】:

  • Shushath,谢谢你的主动,你还能看看亚历山大的回答吗..?
【解决方案2】:

Backbone.js 不支持嵌套模型。实际上,您需要处理很多嵌套模型:发票包含行,部门包含员工等。

您应该查看您的业务模型,如果您有上述嵌套模型,Backbone.Relational 会帮助您。

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

【讨论】:

  • 好的,但在我的情况下,我如何使用 Backbone.relational.. 你能提供一个线索.. 请
  • 查看示例是很好的开始:backbonerelational.org/#examples
猜你喜欢
  • 2010-11-27
  • 2023-03-19
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
相关资源
最近更新 更多