私の ember アプリでは、次のようにリソースがネストされたルーターがあります。
App.Router.map(function () {
this.resource('explore', function() {
this.resource('building', { path: 'building/:slug' });
this.resource('country', { path: ':slug' }, function() {
this.resource('state', {path: ':slug' });
});
});
});
App.CountryRoute = Ember.Route.extend(App.SlugRouter, {
setupController: function(controller, country) {
controller.set('title', 'country detail');
controller.set('model', country);
}
});
App.SlugRouter = Ember.Mixin.create({
serialize: function(model, params) {
var name, object;
object = {};
name = params[0];
object[name] = model.get('slug');
return object;
}
});
App.Building = DS.Model.extend({
country: DS.belongsTo('App.Country'),
name: DS.attr('string'),
slug: DS.attr('string')
});
App.Country = DS.Model.extend({
name: DS.attr('string'),
slug: DS.attr('string'),
buildings: DS.hasMany('App.Building'),
states: DS.hasMany('App.State')
});
探索ルートを読み込むと、サーバー (django-rest-framework アプリ) から受信した建物のリストが表示されます。各建物は、属している国と関係があります。
explore.index ルートでは、 を使用して、建物のリストを各建物のカントリー ルートへのリンクとともに表示します{{linkTo this.country}}
。ただし、href は#/explore/undefined
ではなくとしてロードされ#/explore/<country-name>
ます。
私を混乱させているのは、これがリストを初めてロードしたときにのみ発生することです。別のルートに移動して に戻ると#/explore
、リンクは正しく表示されます。
デバッガーで serialize メソッドにブレークポイントを設定すると、最初にページをロードしたときにモデル オブジェクトが空であることがわかります (_data.attributes は空のオブジェクトです)。デバッガーの [ネットワーク] タブに移動すると、国データを取得するためにサーバーに要求が行われたことがわかりますが、応答はまだ受信されていません。
正しくレンダリングされるため、応答は最終的に受信{{this.country.name}}
されますが、遅すぎます。
回答/ヒントをお寄せいただきありがとうございます。
私が使用している: Ember: 1.0.0-rc.5、Handlebars: 1.0.0-rc.4、jQuery: 1.8.3、ember-data: 0.13、ember-data-django-rest-adapter: 0.13