我正在尝试设置一个返回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
对象上的属性不存在,即未设置content
。 community.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)
似乎它没有设置内容,因为模型已经代理了吗?
答案 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等。