混淆从直接url emberjs加载asyc

时间:2014-03-17 17:27:45

标签: ember.js

以下是我的灯具适配器。 我的理解是,在提供模型时,不会在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'
    });
});

1 个答案:

答案 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 });
}