骨干-关系相关的模型无法创建(Backbone-Relational related models

2019-09-19 02:00发布

我试图创建一个嵌套,关系骨干项目,但我真的很挣扎。 什么我想要做的粗略的想法如下所示,但我在调用时获取()在客户的印象是,一些订单会自动根据该预约创建返回为JSON。

我的JSON格式可以看出MVC的轮廓下:

/****************************************************
/* CLIENT MODEL - Logically the top of the tree
/* has a BookingsCollection containing numerous Booking(s)                                                                             
/*  Client
/*      -Bookings               [BookingsCollection]
/*          -Booking            [Booking]
/*          -Booking            [Booking]
/*****************************************************/
var Client = Backbone.RelationalModel.extend({

    urlRoot: '/URL-THAT-RETURNS-JSON/',

    relations: [
        {
            type: Backbone.HasMany,
            key: 'Booking',
            relatedModel: 'Booking',
            collectionType: 'BookingsCollection'
        }
    ],

    parse: function (response) {

    },

    initialize: function (options) {
        console.log(this, 'Initialized');
    }

});


var Booking = Backbone.RelationalModel.extend({

    initialize: function (options) {
        console.log(this, 'Initialized');
    }

});

var BookingsCollection = Backbone.Collection.extend({

    model: Booking

});

任何帮助勾画我做错了将大规模赞赏。

谢谢

编辑

感谢您抽出时间到后反馈,这正是我所期待的。

是的情况下,该JSON定义物理模型的实际属性,如果你不去手动设置属性的努力吗? 换句话说,如果我回来的JSON是你上面建议的,将骨干只需创建一个客户端对象(与4属性ID,标题,名字和姓)以及2个订房对象(每个有4个属性,想必所述BookingsCollection的每个成员)?

如果是这样的话,什么是引用的每个对象的属性的格式? 当我建立一个非骨干关系小应用程序,在我的情况下结束了,由此我可以参考使用Client.Attribute或预订例如[0] .EventDate的属性。 我似乎并没有能够与你有上面列出的格式来做到这一点。

再次感谢。

Answer 1:

在返回JSON是不是有什么主干或主干-关系默认情况下期待。

骨干网和骨干网,关系的期望是:

{
    "id": "123456",
    "Title":"Mr",
    "FirstName":"Joe",
    "Surname":"Bloggs",
    "Bookings": [
        {
            "id": "585462542",
            "EventName": "Bla",
            "Location":"Dee Bla",
            "EventDate":"November 1, 2012"
        },
        {
            "id": "585462543",
            "EventName": "Bla",
            "Location":"Dee Bla",
            "EventDate":"November 1, 2012"
        }
    ]
}

要使用你的回应,你需要创建一个parse在返回我上面张贴的结构的客户端模式的功能。

你的模型定义与我的工作例如一个JSON例子的jsfiddle: http://jsfiddle.net/edwardmsmith/jVJHq/4/

其他注意事项

  • 主干预计ID字段默认情况下被命名为“ID”。 要使用其他字段作为ID为一个模型,使用Model.idAttribute
  • “密钥”的预订收藏我改成“红黄牌”

示例代码:

Client = Backbone.RelationalModel.extend({

    urlRoot: '/URL-THAT-RETURNS-JSON/',

    relations: [
        {
            type: Backbone.HasMany,
            key: 'Bookings',
            relatedModel: 'Booking',
            collectionType: 'BookingsCollection'
        }
    ],

    parse: function (response) {

    },

    initialize: function (options) {
        console.log(this, 'Initialized');
    }

});


Booking = Backbone.RelationalModel.extend({

    initialize: function (options) {
    console.log(this, 'Initialized');
    }

});

BookingsCollection = Backbone.Collection.extend({

    model: Booking

});

myClient = new Client(    {
        "id": "123456",
        "Title":"Mr",
        "FirstName":"Joe",
        "Surname":"Bloggs",
        "Bookings": [
            {
                "id": "585462542",
                "EventName": "Bla",
                "Location":"Dee Bla",
                "EventDate":"November 1, 2012"
            },
            {
                "id": "585462543",
                "EventName": "Bla",
                "Location":"Dee Bla",
                "EventDate":"November 1, 2012"
            }
        ]
    });


console.log(myClient);​

文章编辑

是的,JSON几乎定义了模型的属性。 您可以使用组合parse() defaults ,并validate()以更好地控制哪些属性都是有效和允许的。

读取和设置属性中的骨干型的正规途径是通过get()escape()set()功能。

set是特别重要的,因为这样做大量的繁琐操作,如确认对你的属性和值validate功能(如果有的话),并触发更改事件,您的意见将被监听模式。

在的情况在这个答案的特定情况下,你可能

myClient.get('Title');  // => "Mr"
myClient.get('Bookings'); //=> an instance of a BookingsCollection with 2 models.
myClient.get('Bookings').first().get('Location'); //=> "Dee Bla"
myClient.get('Bookings').last().get('Location');  //=> "Dee Bla"
myClient.get('Bookings').first().set({location:"Bora Bora"}); 
myClient.get('Bookings').first().get('Location'); //=> "Bora Bora"
myClient.get('Bookings').last().get('Location');  //=> "Dee Bla"


文章来源: Backbone-Relational related models not being created