我使用backbone.js和骨干关系0.5.0与Rails 3.2后端。我有一个卡模型has_many注释。骨干关系抓取相关不发送请求
这里是我JS模型和集合:
Workflow.Collections.Cards = Backbone.Collection.extend({
model: Workflow.Models.Card,
url: '/cards'
});
Workflow.Models.Card = Backbone.RelationalModel.extend({
modelName : 'card',
urlRoot : '/cards',
relations: [
{
type: Backbone.HasMany,
key: 'notes',
relatedModel: 'Workflow.Models.Note',
collectionType: 'Workflow.Collections.Notes',
includeInJSON: false,
reverseRelation: {
key: 'card',
includeInJSON: 'id'
}
}]
});
Workflow.Collections.Notes = Backbone.Collection.extend({
model: Workflow.Models.Note,
url: '/cards/74/notes' // intentionally hard-coded for now
});
Workflow.Models.Note = Backbone.RelationalModel.extend({
modelName : 'note',
urlRoot : '/notes'
});
正常取的伟大工程,但是当我尝试fetchRelated在控制台中,我得到一个空数组:
card = new Workflow.Models.Card({id: 74}) // cool
card.fetch() // hits the sever with GET "/cards/74" - works great
card.fetchRelated('notes') // [] - didn't even try to hit the server
有什么奇怪的是,这个工程:
card.get('notes').fetch() // cool - GET "/cards/74/notes"
我能使用该方法并解析响应文本,但感觉真的很脏。
任何人都知道我在这里失踪?
在此先感谢,这真是折磨我!
斯图
谢谢,我会在我到我的电脑时试试这个!我能问一下为什么给卡片一些笔记开始服务?我试图懒加载这些数据,而不是在页面加载时将其关闭,并且我引导了卡片等等,所以很有可能我的卡片JS模型在我获取它们之前不会意识到他们的笔记... – Stu
好吧,进度。这会为我们指定的每个音符引发GET。任何想法,如果我可以使用fetchRelated完全懒加载笔记?我想从服务器上拉下新的... – Stu
好的,我明白你的观点。我窥视了主干关系源,并且我认为如果没有相应的模型ID数组,就不能使用'fetchRelated'。顺便说一句,你可以看看[单元测试] [1]的例子,使用'fetchRelated'。 因此,当您获取一个'Card'并调用'fetchRelated'时,您可以获得'Note' ids数组。或者,也许你不喜欢这样做? [1]:https://github.com/PaulUithol/Backbone-relational/blob/master/test/tests.js#L563 – theotheo