backbone.js 中模型之间的关系
Relation between models in backbone.js
我正在寻找正确的 backbone 结构来实现以下目标:
两个服务器 API:
GET api/event/4
: returns id 为 4 的事件对象。
GET api/event/4/registrations
: returns属于id为4的事件的注册对象列表
我想要一个显示事件对象和注册列表的视图。
这非常简单,但我不知道如何组织我的事件和注册模型。
我应该使用 backbone-关系型吗?
我的事件模型目前是这样的:
(该集合预计将包含从现在开始的接下来的 10 个事件)。
我应该如何定义我的注册模型以及如何初始化它,知道它总是在事件模型的上下文中?
var app = app || {};
app.EventModel = Backbone.Model.extend({
urlRoot: app.API_server + 'event'
});
app.EventCollection = Backbone.Collection.extend({
model: app.EventModel,
url: app.API_server + 'event',
initialize: function(){
dt = new Date();
start_dt = dt.toISOString();
this.fetch({
data: {limit:10, start_dt:start_dt},
error: function (model, response, options) {
if(response.status == '403') {
app.Session.logout();
}
}
})
}
});
为注册做一个集合,使用url
属性作为函数。默认情况下,RegistrationCollection
模型的 urlRoot
将是集合的 url
并附加了它们的 id
。
app.RegistrationCollection = Backbone.Collection.extend({
url: function() {
return app.API_server + 'event/' + this.id + '/registrations';
},
initialize: function(models, options) {
options = options || {};
this.id = options.id;
}
});
然后,在 EventModel
初始化时,添加 RegistrationCollection
作为 属性,将事件 id
作为选项传递给集合。
app.EventModel = Backbone.Model.extend({
urlRoot: app.API_server + 'event',
initialize: function() {
this.registrations = new app.RegistrationCollection(null, {
id: this.id
});
}
});
从 init 中删除 fetch
,你想让你的集合可重用。
app.EventCollection = Backbone.Collection.extend({
model: app.EventModel,
url: app.API_server + 'event',
});
在视图或路由器内部获取,具体取决于它对您的应用程序更有意义的位置。
var EventView = Backbone.View.extend({
initialize: function() {
this.collection = new app.EventCollection();
var dt = new Date(),
start_dt = dt.toISOString();
// this should be here, outside of the collection.
this.collection.fetch({
data: { limit: 10, start_dt: start_dt },
error: function(model, response, options) {
if (response.status === 403) {
app.Session.logout();
}
}
});
},
});
我正在寻找正确的 backbone 结构来实现以下目标:
两个服务器 API:
GET api/event/4
: returns id 为 4 的事件对象。GET api/event/4/registrations
: returns属于id为4的事件的注册对象列表
我想要一个显示事件对象和注册列表的视图。
这非常简单,但我不知道如何组织我的事件和注册模型。 我应该使用 backbone-关系型吗?
我的事件模型目前是这样的: (该集合预计将包含从现在开始的接下来的 10 个事件)。
我应该如何定义我的注册模型以及如何初始化它,知道它总是在事件模型的上下文中?
var app = app || {};
app.EventModel = Backbone.Model.extend({
urlRoot: app.API_server + 'event'
});
app.EventCollection = Backbone.Collection.extend({
model: app.EventModel,
url: app.API_server + 'event',
initialize: function(){
dt = new Date();
start_dt = dt.toISOString();
this.fetch({
data: {limit:10, start_dt:start_dt},
error: function (model, response, options) {
if(response.status == '403') {
app.Session.logout();
}
}
})
}
});
为注册做一个集合,使用url
属性作为函数。默认情况下,RegistrationCollection
模型的 urlRoot
将是集合的 url
并附加了它们的 id
。
app.RegistrationCollection = Backbone.Collection.extend({
url: function() {
return app.API_server + 'event/' + this.id + '/registrations';
},
initialize: function(models, options) {
options = options || {};
this.id = options.id;
}
});
然后,在 EventModel
初始化时,添加 RegistrationCollection
作为 属性,将事件 id
作为选项传递给集合。
app.EventModel = Backbone.Model.extend({
urlRoot: app.API_server + 'event',
initialize: function() {
this.registrations = new app.RegistrationCollection(null, {
id: this.id
});
}
});
从 init 中删除 fetch
,你想让你的集合可重用。
app.EventCollection = Backbone.Collection.extend({
model: app.EventModel,
url: app.API_server + 'event',
});
在视图或路由器内部获取,具体取决于它对您的应用程序更有意义的位置。
var EventView = Backbone.View.extend({
initialize: function() {
this.collection = new app.EventCollection();
var dt = new Date(),
start_dt = dt.toISOString();
// this should be here, outside of the collection.
this.collection.fetch({
data: { limit: 10, start_dt: start_dt },
error: function(model, response, options) {
if (response.status === 403) {
app.Session.logout();
}
}
});
},
});