Вложенная модель в Backbone.js - PullRequest
2 голосов
/ 18 марта 2012

Я хочу отобразить JSON с иерархической структурой на модель. Я могу отобразить данные в верхней иерархии на модель. Однако я не могу сопоставить его с моделью, в которую вложен элемент, который я вложил.

JSON

{
    "attr1":"data1",
    "chi1": {
        "attr1":"chi1_data"
    },
    "list1":[
        {"name":"name1"},
        {"name":"name2"}
    ]
}

JavaScript

var Child2 = Backbone.Model.extend({
    fun1:function() {
        alert("this is Child2");
    }
});

var List1 = Backbone.Collection.extend({
    url: "list1",
    model: Child2,
    fun1:function() {
        alert("this is List1");
    }
});

var Child1 = Backbone.Model.extend({
});

var Root1 = Backbone.Model.extend({
    url: "sample.json",
    defaults : {
        list1 : new List1,
        chi1 : new Child1,
    }
});

var View1 = Backbone.View.extend({
    el: "#friends",
    events: {
        "click button": "sample"
    },
    initialize: function() {
        this.root1 = new Root1();
    },
    sample: function() {
        this.root1.fetch({
            success: function(model) {
                // this is success
                alert(model.get("attr1"));

                // this is error
                alert(model.get("list1").fun1());

                // this is error too.
                model.get("list1").each(function(attr) {
                    alert(attr.fun1());
                });
            },
            error: function(model, res) { 
                alert("error: " + res.status);
            }
        });
    },
});

Ответы [ 2 ]

3 голосов
/ 18 марта 2012

Возможно, вы захотите взглянуть на этот плагин.

http://documentup.com/afeld/backbone-nested/

Может быть не совсем то, что вы хотите, но он может, по крайней мере, указать вам на правонаправление.

Другое, что вы можете сделать, это переопределить метод синтаксического анализа в вашей модели ...

parse: function(resp){
    // And setup the model using the raw resp
    // The resp data is your json from the server and will 
    // be used to setup the model. So overriding parse, you can
    // setup the model exactly they way you want.
    return resp;
}
1 голос
/ 19 марта 2012

спасибо jcreamer.

плагин, вложенный в магистраль, похоже, отличается от того, что я хочу сделать.Я могу реализовать гнездо модели.При использовании функции разбора.

// it is able to get "chi1_data"
new Child2(JSON.parse(JSON.stringify(resp["chi1"]))).get("attr1")

// it is able to get "name2"
new Child2(JSON.parse(JSON.stringify(new List1(JSON.parse(JSON.stringify(resp["list1"]))).get(2)))).get("name")

Я обнаружил подключаемый модуль Backbone. Я попробую это

https://github.com/PaulUithol/Backbone-relational

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...