在我的 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 应用程序)接收到的建筑物列表,每个建筑物都与具有 belongsTo 属性的国家/地区有关系。
在 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