试图将一个backone解决方案放在一起来清理混乱的javascript,最终是一项痛苦的努力。我肯定做错了什么,但找不到任何解决方案。数据包含许多具有嵌套模型 CarsType 的车库,这些车库具有以下属性(名称、描述(。每个车库使用每种车型一次,但可以在许多车库中找到。汽车类型按车库任意排序因此,关系表car_type/车库名称包是这样定义的|身份证 |garage_id |car_type_id |职位 |
每种车型都分配给许多机械师。 每个机械师可以在许多车库中工作。所以第三个嵌套级别是一个关系表mechanic_pack|mechanic_id|pack_id|
后端是 rails 3.1,它吐出了 Json。
Garage = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasMany,
key: 'Packs',
relatedModel: 'pack',
collectionType: 'Packs',
reverseRelation: {
key: 'garage',
includeInJSON: 'id'
}
}
],
initialize: function(attributes) {
this.fetchRelated("packs");
},
url : function() {
var base = 'garages';
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
}
///... more method ...
});
包集合在另一个文件中定义
Packs= Backbone.Collection.extend({
model: Pack,
url: '/packs/list/:garage_id'
});
模型加载正确,但 fetchRelated 不会提取,也不会抛出任何错误。Firebugs 中的断点显示 toFetch 始终是未定义的
fetchRelated: function( key, options ) {
options || ( options = {} );
var rel = this.getRelation( key ),
keyContents = rel && rel.keyContents,
toFetch = keyContents && _.select( _.isArray( keyContents ) ? keyContents : [ keyContents ], function( item ) {
var id = _.isString( item ) || _.isNumber( item ) ? item : item[ rel.relatedModel.prototype.idAttribute ];
return id && !Backbone.Relational.store.find( rel.relatedModel, id );
}, this );
if ( toFetch && toFetch.length ) {
......
我应该如何调用 fetchRelated?
第二个问题:当请求车库时,轨道会发送嵌套模型的完整树。有没有办法从最初的 JSON 答案填充后退嵌套模型?并能够使用自己的视图操作每个嵌套模型?
initialize: function(attributes) {
this.fetchRelated("Packs");
}
此外,相关模型"包"和与您的集合关联的模型之间似乎存在不一致:包
如果它仍然不起作用,您是否尝试过为您的密钥指定一个与您的集合类型不同的名称?