javascript-未创建骨干关系相关模型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-未创建骨干关系相关模型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3947字,纯文字阅读大概需要6分钟。
内容图文
![javascript-未创建骨干关系相关模型](/upload/InfoBanner/zyjiaocheng/656/406f3b210a844f9684ddd83a4fb460dc.jpg)
我正在尝试创建一个嵌套的关系主干项目,但是我真的很努力.下面显示了我要执行的操作的大致思路,但给我留下了印象,即在Client上调用fetch()时,将基于作为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与您上面建议的一样,Backbone会简单地创建一个Client对象(具有4个属性id,title,firstname和ampname)以及2个Booking对象(每个具有4个属性,大概是BookingsCollection的每个成员)?
在这种情况下,引用每个对象的属性的格式是什么?当我设置一个非骨干关系微型应用程序时,遇到了这样的情况,例如,我只能使用Client.Attribute或Booking [0] .EventDate来引用属性.我似乎无法使用上面概述的格式执行此操作.
再次感谢.
解决方法:
默认情况下,返回的JSON不是Backbone或Backbone-Relational所期望的.
骨干和骨干相关的期望是:
{
"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"
}
]
}
要使用您的响应,您需要在Client模型上创建一个解析函数,该函数返回我上面发布的结构.
您的模型定义的jsFiddle示例与我的示例JSON:http://jsfiddle.net/edwardmsmith/jVJHq/4/一起使用
其他注意事项
> Backbone希望ID字段默认被命名为“ id”.要将另一个字段用作模型的ID,请使用Model.idAttribute
>我将“ Bookings Collection”的“键”更改为“ Bookings”
样例代码:
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()函数.
设置尤为重要,因为这会做大量的内务处理,例如根据您的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"
内容总结
以上是互联网集市为您收集整理的javascript-未创建骨干关系相关模型全部内容,希望文章能够帮你解决javascript-未创建骨干关系相关模型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。