2

我现在有一个困惑的状态,任何人清除我的疑问并提供更多关于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"  : "#"
    }
})

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

任何人请澄清我这种情况..?

这是要演奏的小提琴

4

2 回答 2

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这会给你有问题的集合。

于 2013-08-21T07:26:53.270 回答
1

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

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

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

于 2013-08-21T08:18:44.587 回答