我试图创建一个嵌套,关系骨干项目,但我真的很挣扎。 什么我想要做的粗略的想法如下所示,但我在调用时获取()在客户的印象是,一些订单会自动根据该预约创建返回为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的属性。 我似乎并没有能够与你有上面列出的格式来做到这一点。
再次感谢。
在返回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"