所以,我刚刚开始使用backbone.js以及我在理解如何定义两个集合时遇到的麻烦,其中一个集合在另一个集合的模型中。
REST API看起来像这样:
/sites <--- one collection
/sites/123/entities <--- another collection
/sites/123/entities/abc <--- a specific entity within a specific site
这就是网站集的定义方式:
var ROOT = 'http://localhost:5000';
Site = Backbone.Model.extend({
defaults: {
id: "default",
description: "My site"
}
});
Sites = Backbone.Collection.extend({
model: Site,
url: ROOT + "/sites"
});
实体集合和模型如何实现这一目标?
答案 0 :(得分:1)
这是我想象的,虽然还没有测试过: 实体模型/集合:
var ROOT = 'http://localhost:5000';
Entity = Backbone.Model.extend({
defaults: {
id: "default",
description: "My Entity"
}
});
Entities = Backbone.Collection.extend({
model: Entity,
ownUrl: '/entities',
site: {},
url: function() {
return (this.site? this.site.url() : '') + this.ownUrl;
},
initialize: function(options) {
this.site = options.site;
}
});
网站模型/集合:
Site = Backbone.Model.extend({
defaults: {
id: "default",
description: "My site"
}
});
Sites = Backbone.Collection.extend({
model: Site,
url: ROOT + "/sites",
});
设置示例:
// New collection of site
var site1 = new Site({id: 'site1', description: "This is site 1"});
var site2 = new Site({id: 'site2', description: "This is site 2"});
// Add entities to sites
var entityCollection1 = new Entities([
{id: 'entity1'},
{id: 'entity2'}
], {site: site1});
// Collection of sites
var mySites = new Sites([site1,site2]);
已编辑:
在1.1中,Backbone Views不再附加options参数 this.options自动。如果你愿意,可以继续附上它 喜欢。 http://backbonejs.org/#changelog
在这种情况下,它应该返回模型site1的'site / 1'(即'site / 2')然后你附加你的实体集合url将是什么。(例如:'/ entities')。 这使得您的网站1的实体集合网址变为: / site / 1 / entities 。此集合中的任何模型都将包含网址 / site / 1 / entities / [modelId]