Ember:使用ember-data

时间:2017-04-04 05:49:46

标签: ember.js 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中的产品。但我无法访问路线model.products中的setupController。我得到的错误是:

TypeError: Cannot read property '_relationships' of undefined

这真让我感到困惑!我的路线model挂钩是:

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

setupController挂钩(导致错误)是:

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

'类别'模型:

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

'产品'模型:

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,所以我可以将其称为其他内容。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

关系返回承诺。因此,要获得结果,您需要使用then。但是在模板中访问它将起作用,因为默认情况下模板是承诺的。

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

请阅读relationships as promises指南。