以下是我的灯具适配器。 我的理解是,在提供模型时,不会在transitionTo或link-to上调用模型钩子。
但是当通过共享或复制粘贴模式挂钩来实现相同的路径时,会调用模型钩子。
现在当我通过传递模型进行过渡时,我正确地看到了城市1和城市2。
但是当我复制过去的网址时,城市不会显示。我试过.then
,然后让城市仍然无法看到。我评论过这一行。我知道我做的事情很愚蠢。我用google搜索但无法弄清楚。
这是我的jsbin:BIN BIN BIN
虽然这与THiS question类似。 ans是使用modelFor然后findBy。但是modelFor给出了父路线的模型。但在我的情况下,因为它不是嵌套的路线。 this.modelFor('countries')
给出了未定义,因此我无法在其上应用findBy。
model: function(params) {
this.store.find('country', params.countryCode).then(function(country) {
console.log(country);
//country.get('cities');
});
}
Q.Country.FIXTURES = [{
id: 1,
countryCode: "CO",
countryName: "Country",
cities: [1, 2]
}];
Q.City.FIXTURES = [{
id: 1,
cityName: "city 1",
country: 1
}, {
id: 2,
cityName: "city 2",
country: 1
}];
Q.CountryRoute = Ember.Route.extend({
model: function(params) {
return this.store.find('country', params.countryCode);
},
serialize: function(country) {
return {
country_id: country.get("countryCode")
};
},
afterModel: function(model) {
console.log("after model was called");
//this.transitionTo('cities',model);
}
});
Q.Router.map(function() {
this.resource("countries");
this.resource('country', {
path: ':country_id'
});
});
答案 0 :(得分:1)
您必须return
来自model()
挂钩。无需使用then()
,因为在模型钩子中,Ember会自动等待承诺解析。
model: function(params) {
return this.store.find('country', params.country_id);
}
如果你想使用slug,这样的东西可以起作用:
Q.Router.map(function() {
this.resource("countries");
this.resource('country', {
path: ':country_code'
});
});
model: function(params) {
return this.store.findQuery('country', { code: params.country_code });
}