【问题标题】:Ember: Properly using store within componentEmber:在组件中正确使用商店
【发布时间】:2015-05-26 23:05:03
【问题描述】:

相关信息: 余烬 1.11.1 Ember 数据 1.0.0-beta.16 Ember CLI

我正在尝试为我的应用程序中的指标制作一个可重用的组件。在组件内,它使用选定的选项运行查询。问题是,即使我看到网络请求正确启动,它也永远不会进入 Ember 对象。

这是我的组件代码:

import Ember from 'ember';

var arr = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin);

export default Ember.Component.extend({
store: Ember.inject.service(),
type: null,
startTime: null,
finishTime: null,
interval: 0,
detail: false,

didInsertElement: function() {
    // Ensure we have the latest metric types
    this.set('metricTypes', arr.create({
        promise: this.get('store').find('metric-type')
    }));
},

data: function() {
    var results = this.metricQuery();
    return results;
}.property(),


/* NOT PROPERTIES */

metricQuery: function() {
    return this.get('store')
               .find('metric-query', { type: this.get('type'),
                                       startTime: this.get('startTime'),
                                       finishTime: this.get('finishTime'),
                                       interval: this.get('interval'),
                                       detail: this.get('detail') });
}
});

我看到 metricTypes 返回并正确设置为 Ember 对象。但是当 metricQuery 函数运行时,对象并没有被设置。我在检查器中看到了该属性,但没有内容。但是,我确实看到网络请求以正确的数据正确发出,并返回了侧载数据:

{"metricQuery":{
    "id":"00000000-0000-0000-0000-000000000000",
    "metricType":["c47707e1-a9d1-420a-87b6-4e65b77e6a58"],
    "metricResult":"1035be30-cf6e-4425-ac58-d0e2fd2cf7b1"},

"metricResult":{... data... }

"metricType":[{.... data....}]}

但是当我在 Ember 检查器中查看对象时,我看到的是空内容。这是我第一次尝试使用 store 从组件中获取数据,但我不确定自己做错了什么。

如何访问从 metricQuery 上的查找返回的数据?

提前感谢您的帮助。

【问题讨论】:

  • 将指标类型包装在 Promise 代理中没有任何意义,ember 数据已经返回数组/对象代理中的项目。
  • 它应该返回一组指标查询,而不是单个指标查询,emberjs.com/api/data/classes/DS.Store.html#method_findQuery
  • 谢谢!我从来没有注意到度量查询需要是一个集合。我们更改了 API 的返回值,它现在可以正常工作了!再次感谢!
  • 不客气,祝你一切顺利!

标签: javascript api ember.js ember-components


【解决方案1】:

正如上面 cmets 中提到的 Kingpin2k,我的问题是 metricQuery 的 API 的返回是一个单一的实体,当它期望一个集合时。我们更改了 API 返回:

metricQuery { ...data...}

到:

metricQuery [{ ...data...}]

一切都很完美。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多