Ember:使用 ember-data 访问 setupController 中的旁加载数据

Ember: accessing sideloaded data in setupController with ember-data

我正在使用 RESTAdapter 并试图弄清楚如何访问旁加载数据。
有效负载的示例是:

{
    "category": {
        "categoryName": "test category",
        "id": 6,
        "products": [
            4419,
            502,
            3992
        ]
    },
    "products": [{
        "description": "Whatevs",
        "id": 4419,
        "name": "Product 1",
        "price": 114.95,
        "skuid": "S21046"
    }, {
        "description": "Whatevs",
        "id": 502,
        "name": "Product 2",
        "price": 114.95,
        "skuid": "SOLS2594"
    }, {
        "description": "Whatevs",
        "id": 3992,
        "name": "Product 3",
        "price": 114.95,
        "skuid": "S21015"
    }]
}

我可以在 ember 检查器中看到 'category' 和 'product' 数据模型(和数据),所以我知道它们正在加载。

我什至可以访问模板中的产品 model.products。但是我无法访问路由 setupController 中的 model.products。我得到的错误是:

TypeError: Cannot read property '_relationships' of undefined

这让我很困惑!我的路由 model hook 是:

model(params) {
    return this.get('store').queryRecord('category', {
        id: params.id
    })
}

setupController 挂钩(导致错误)是:

setupController(controller, model) {
    controller.set('results', model.products);
}

'category'型号:

export default DS.Model.extend({
    products: hasMany('product'),
    categoryName: attr('string')
});

'product'型号:

export default DS.Model.extend({

    name: attr('string'),
    skuid: attr('string'),
    price: attr('number'),
    description: attr('string')

});

我的模板(如果我从路由中删除 'setupController' 钩子,它就可以工作):

{{#each model.products as |product|}}
{{product.name}} {{product.skuid}}<br />
{{/each}}

我希望能够从路由的 setupController 访问 model.products,这样我就可以将其命名为其他名称。任何帮助表示赞赏。

关系returns承诺。所以要得到你需要使用 then 的结果。但是在模板中访问它是可行的,因为模板默认是 promise 感知的。

setupController(controller, model) {
    //controller.set('results', model.products);
    model.get('products').then((result) => {
     controller.set('results',result);
    });
}

请阅读 relationships as promises 指南。