我正在寻找使用模型的URL获取骨干集合的子集。 与在以下位置找到的“嵌套集合”教程类似:
http://liquidmedia.org/blog/2011/01/backbone-js-part-1/
由于这需要数据api,模型,集合,视图,我已经包含了我想要创建的完整代码:
代码(在节点/ Mongoose / Express / Rest中):https://github.com/1manStartup/Backbone-URLRoot
直播示例(在我的ec2上): http://54.251.104.185/
我相信我的问题在于渲染视图和获取模型数据。
我想做什么:渲染所有狗独有的文章。路线是: / API / makearticle /:ID
如果你不使用NodeJ,我的JSON Api看起来像这样:
{
"articlename": "feed chocolate",
"_dog": {
"name": "pitbull",
"_id": "51d0b9ad6fd59c5059000002"
},
"_id": "51d0c22a6fd59c5059000007",
"__v": 0
},
{
"articlename": "took to vet",
"_dog": {
"name": "chihuaha",
"_id": "51d0b9af6fd59c5059000003"
},
"_id": "51d0c22e6fd59c5059000008",
"__v": 0
},
以下是我的模特和收藏品: 其余骨干代码见于: https://github.com/1manStartup/Backbone-URLRoot
https://github.com/1manStartup/Backbone-URLRoot/blob/master/public/javascripts/demo-routerurl.js
Dog = Backbone.Model.extend({
idAttribute: '_id',
urlRoot:'/api/makedog' ,
initialize:function () {
this.dogs = new Dogs();
this.dogs.url = this.urlRoot + "/" + this.id ;
}
});
Dogs = Backbone.Collection.extend({
model: Dog,
url: '/api/makedog'
});
Article = Backbone.Model.extend({
idAttribute: '_id',
urlRoot:'/api/makearticle' ,
initialize:function () {
this.merr = new Articles;
this.merr.url = this.urlRoot + "/" + this.id ;
}
});
请帮助我好几天了。感谢。
答案 0 :(得分:1)
你的API似乎并不是RESTful,所以你可能会给自己造成比必要更多麻烦:Backbone默认需要一个RESTful API。
无论如何,你需要做一些像
这样的事情var Article = Backbone.Model.extend({
idAttribute: '_id'
});
var ArticleCollection = Backbone.Collection.extend({
model: Article
});
var Dog = Backbone.Model.extend({
idAttribute: '_id',
initialize:function () {
this.articles = new ArticleCollection({
url: "api/dogs/" + this.get('id');
});
}
});
然后,你可以做(例如):
var doggy = new Dog({id: 51d0b9ad6fd59c5059000002});
doggy.articles.fetch();
var articlesForDoggy = doggy.articles;
作为一个侧面节点,为什么每次实例化一个新的狗模型实例时都会创建一个新的狗集合?
另外需要注意的是:我会认真对待您的API设计。如果您使用不同的路径来创建模型(这似乎是由'make ...'路由表示),那么您将不得不编写一大堆代码来使Backbone持久层与您的API。
此外,此API并不真正遵循约定:api/dogs/XXX
不应返回文章列表:它应返回标识为XXX
的dog实例。使用像api/dogs/XXX/articles
这样的网址对于与狗相关的文章列表会更有意义。
友情提示:虽然上面的代码可以帮助您解决问题,但您真的应该重新考虑如何设计API。使用带有Backbone的非RESTful API,结合非标准命名约定,基本上可以保证您将进入项目的痛苦世界。