面倒な JavaScript をきれいにするためのバックボーン ソリューションをまとめようとすると、結局は骨の折れる作業になります。確かに私は何か間違ったことをしていますが、解決策が見つかりません。データには、次の属性 (名前、説明) を持つネストされたモデル CarsType を持つ多くのガレージが含まれています。各 carType はガレージごとに 1 回使用されますが、多くのガレージで見つけることができます。carType はガレージごとに任意にソートされるため、リレーション テーブル car_type/ガレージ ネーム パックはこのように定義されます | ID | ガレージID | car_type_id | 位置 |
各 carType は多くのメカニックに割り当てられます。各メカニックは多くのガレージで働くことができます。したがって、ネストされた 3 番目のレベルはリレーション テーブル
バックエンドはJsonを吐き出すrails 3.1です。
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 コレクションは別のファイルで定義されています
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 を呼び出すにはどうすればよいですか?
2 番目の質問: ガレージが要求されると、Rails はネストされたモデルの完全なツリーを送信します。最初のjsonの回答からバックボーンのネストされたモデルを作成する方法はありますか? ネストされた各モデルを独自のビューで操作できますか?