在我的应用程序中,我有几个可以成为朋友的用户。现在我正在尝试构建一个从当前登录用户到另一个用户获取“friendShipStatus”的函数。 这是以下问题的后续问题:Intersection of promises and dependent computed properties
/**
* Gives the relation between two User
* 4: has requested your friendship
* 3: Yourself
* 2: Friends
* 1: FriendShip Request
*/
friendShipStatus: function() {
return this.container.lookup('user:current').then(function(user){
if(this.get('friends').contains(user)){
return 2;
} else if(this.get('friendsWithMe').contains(user)){
return 4;
} else if(this.get('myFriends').contains(user)){
return 1;
} else if (this.get('id') === user.get('id')){
return 3;
} else {
return 0;
}
});
}.property('friends.@each')
Promise的东西已经是尝试,但不起作用。我宁愿让currentUser注入并观察属性,只要当前用户被解析,属性就会改变。我的尝试因此:
Ember.Application.initializer({
name: "currentUser",
initialize: function(container, application) {
var store = container.lookup('store:main');
container.register('user:current', store.find('user', 1), { instantiate: false, singleton: true });
}
});
Ember.Application.initializer({
name: "injectCurrentUser",
after: 'currentUser',
initialize: function(container) {
// container.injection('controller:application', 'currentUser', 'user:current');
container.typeInjection('route', 'currentUser', 'user:current');
container.typeInjection('controller', 'currentUser', 'user:current');
container.typeInjection('model', 'currentUser', 'user:current');
container.injection('user:model', 'currentUser', 'user:current');
}
});
我已经尝试了注射类型和常规注射。但是在我的usermodel中,我的currentUser属性总是未定义的。
如何将当前用户注入我的用户模型?
答案 0 :(得分:3)
在注册之前,您并没有等待用户从ember数据返回。你可能希望推迟准备就绪,直到它回来为止。尝试这样的事情:
Ember.Application.initializer({
name: "currentUser",
initialize: function(container, application) {
application.deferReadiness();
container.lookup('store:main').find('user', 1).then(function(user) {
application.register('user:current', user, { instantiate: false, singleton: true });
application.inject('route', 'currentUser', 'user:current');
application.inject('controller', 'currentUser', 'user:current');
application.advanceReadiness();
}, function() {
application.advanceReadiness();
});
}
});
我不确定你为什么要注入你的模型,路由/控制器就足够了。另请注意,这是一个初始化程序而不是两个。
答案 1 :(得分:3)
刚刚找到了使用ember-cli服务的另一种解决方案。首先生成服务ember g service user
。然后将store
注入服务,以便您可以执行find()
。接下来,将您的服务从标准Object
更改为ObjectProxy
。最后在init()
上执行查找并将结果设置为content
。以下是我最终的内容:
// app/initializers/user-service.js
export function initialize(container, application) {
application.inject('route', 'user', 'service:user');
application.inject('controller', 'user', 'service:user');
application.inject('service:user', 'store', 'store:main');
}
export default {
name: 'user-service',
initialize: initialize
};
// app/services/user.js
import Ember from 'ember';
export default Ember.ObjectProxy.extend({
init: function(){
this.set('content', this.store.find('user', 1));
}
});
答案 2 :(得分:1)
关于模型注入,实际上是可行的,请参阅此处的答案