使用Ember Data查询的PromiseProxy服务

时间:2016-03-09 21:12:40

标签: ember.js promise ember-data proxy-classes

我正在尝试设置一个返回Ember Data模型的PromiseProxy服务,但结果似乎没有设置content属性。

我的服务如下:

import Ember from 'ember';

const { computed, inject, ObjectProxy, PromiseProxyMixin } = Ember;

export default ObjectProxy.extend(PromiseProxyMixin, {
  isServiceFactory: true,
  store: inject.service(),

  promise: computed({
    get() {
      var store = this.get('store');

      return store.findRecord('community', window.community.id);
    }
  })
});

然后我将此服务注入以下位置:

export function initialize(container, application) {
  application.inject('controller', 'community', 'service:community');
  application.inject('route', 'community', 'service:community');
  application.inject('model', 'community', 'service:community');
  application.inject('component', 'community', 'service:community');
}

export default {
  name: 'community',
  after: 'store',
  initialize: initialize
};

然后我将它作为我的应用程序路径中的模型用作某种deferReadiness解决方法,因为我的整个应用程序依赖于这一个模型 在整个过程中使用,预计会在那里使用。

export default Ember.Route.extend({
  model() {
    return this.get('community');
  }
});

问题在于它继续到其他路由,并且community对象上的属性不存在,即未设置contentcommunity.isPending true也是then。 CP确实被击中并且数据返回(我在CP中使用 promise: computed({ get() { var store = this.get('store'); return store.findRecord('community', window.community.id) .then(data => { this.set('content', data); return data; }) } }) 进行了测试)。

以下是一个完整的要点:https://gist.github.com/knownasilya/8c9f78d910ed50ec8d84

修改

所以我找到了一个解决方法:

ff <- sql(sqlContext, "SELECT `device`.`browser`.`cookie` FROM transactionsTbl")
showDF(ff)

似乎它没有设置内容,因为模型已经代理了吗?

1 个答案:

答案 0 :(得分:1)

Ember Data已将其对象包装在ObjectProxy中,您只需将对象设置为服务即可。

此外,在初始化程序的未来版本语法中不推荐使用此语法,因为它已移至实例初始化程序,但没什么大不了的。

 initialize: function (container, application) {
    // the store will be available from the container, 
    // and the name of the store changes depending on which version you are using.
    var store = container.lookup('service:store'),
        community= store.find('community', id);
    application.register("service:community", community, { instantiate: false });
    application.inject("controller", "community", "service:community");
    application.inject("route", "community", "service:community");
    application.inject("component", "community", "service:community");
}

然后你仍然可以从模型返回社区,beforeModel hook等。