2013-06-30 88 views
0

我正在寻找使用模型网址获取骨干网集合的子集。 为“嵌套集合”的教程类似的发现:使用唯一模型URL获取骨干网集合子集

http://liquidmedia.org/blog/2011/01/backbone-js-part-1/

因为这需要数据API,模型,集合,观点我已经包括了我的什么我试着去创造全码:

代码(在节点/猫鼬/快速/垫)https://github.com/1manStartup/Backbone-URLRoot

活生生的例子(在我的EC2):http://54.251.104.185/ 我BELI前景我的问题存在于渲染视图和提取模型数据的地方。

我在做什么:呈现所有文章独特的狗。路线为: /API/makearticle /:ID

如果你不使用的NodeJS,我的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

这似乎是更大的API问题:你需要一个API端点(例如'/ API /狗/ 3/articles'),将返回与给定的狗的文章列表。然后,只需将该数据加载到集合中并使用集合/合成视图来显示即可。 –

+0

感谢您的回复。使用我当前的API即可显示集合中所有文章的列表。也创造了像/ API /狗/路由:id其中:身份证被用来识别狗的文章中。林有可能在,即时通讯只能够渲染完整集合,而不是由URL定义的单个模式的集合中取一部分麻烦:ID。 – 1ManStartup

+0

什么是对/ API的API返回/狗/:ID?在上面的代码中,有以下几个狗的文章似乎要返回...... –

回答

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; 

作为附带节点,你为什么要创建一个新的收集狗每次你instanciate一个新的狗模型实例?

也要注意:我会认真对待你的API设计。如果您使用不同的路线来创建模型(这似乎是由'make ...'路线指示的),您将不得不编写一大堆代码来让Backbone持久层与您的API。

此外,这个API并没有真正遵循约定:api/dogs/XXX不应该返回文章列表:它应该返回具有编号为XXX的狗实例。使用像api/dogs/XXX/articles这样的URL会使与狗相关的文章列表更具意义。友好的建议:虽然上面的代码应该让你在路上,但你真的应该重新思考你如何设计你的API。在Backbone中使用非RESTful API以及非标准的命名约定基本上可以保证您将与您的项目一起进入一个痛苦的世界。