Почему / Когда я должен использовать Backbone-реляционную структуру

Теперь у меня возникла путаница, кто-нибудь развеет мои сомнения и предоставит более подробную информацию о 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"  : "#"
    }
})

если да, то как я могу соединить эти обе модели ... и какую пользу я получу. Я ищу в Интернете, чтобы найти какой-нибудь простой учебник, чтобы понять это.. Но я не смог найти какой-нибудь..

Кто-нибудь проясните мне этот сценарий, пожалуйста..?

Вот игра на скрипке


person 3gwebtrain    schedule 21.08.2013    source источник
comment
Вы придерживаетесь правильного подхода. Создайте 2 отдельные модели. И первая модель будет иметь атрибут, который снова будет подмоделями коллекции. Сделав это, вы получите подссылки в виде вложенной коллекции внутри модели. Это позволит всем зависимым данным находиться в одной модели, а не в отдельной коллекции вне модели.   -  person Sushanth --    schedule 21.08.2013
comment
звучит отлично. Можете ли вы показать мне или обновить скрипт для живой демонстрации ... и здесь нет работы для реляционной магистрали ...?   -  person 3gwebtrain    schedule 21.08.2013


Ответы (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 который даст вам рассматриваемую коллекцию.

person Sushanth --    schedule 21.08.2013
comment
Шушат, спасибо за вашу инициативу, вы все еще можете посмотреть ответ Александра, пожалуйста..? - person 3gwebtrain; 21.08.2013

Backbone.js не поддерживает вложенные модели из коробки. На самом деле вы много имеете дело с вложенными моделями: счета содержат строки, отделы содержат сотрудников и т. д.

Вы должны изучить свою бизнес-модель, если у вас есть вложенные модели, как указано выше, Backbone.Relational вам поможет.

Вы в принципе не можете заархивировать это с помощью самого Backbone.js, ожидая написания собственного пользовательского кода, чтобы перегрузить parse метод моделей. Мы сделали это на одном из проектов, над которыми я работаю, но главный урок, который мы извлекли - используйте проверенный временем плагин вместо того, чтобы изобретать собственное колесо. И Backbone.Relational кажется хорошим выбором.

person Alexander Beletsky    schedule 21.08.2013
comment
хорошо, но в моем случае, как я могу использовать Backbone.relational... не могли бы вы дать ключ... пожалуйста - person 3gwebtrain; 21.08.2013
comment
Для начала полезно ознакомиться с примерами: backbonerelational.org/#examples - person Alexander Beletsky; 21.08.2013