Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何将currentUser注入所有其他用户模型_Ember.js_Ember Data - Fatal编程技术网

Ember.js 如何将currentUser注入所有其他用户模型

Ember.js 如何将currentUser注入所有其他用户模型,ember.js,ember-data,Ember.js,Ember Data,在我的应用程序中,我有几个用户可以成为朋友。现在,我尝试构建一个函数,从当前登录的用户向另一个用户获取“Friendstatus”。 这是这个问题的后续问题: 承诺的东西已经是一种尝试,但不起作用。我更愿意让currentUser被注入,然后观察属性,一旦当前用户被解析,属性就会改变。因此,我试图: Ember.Application.initializer({ name: "currentUser", initialize: function(container, applicati

在我的应用程序中,我有几个用户可以成为朋友。现在,我尝试构建一个函数,从当前登录的用户向另一个用户获取“Friendstatus”。 这是这个问题的后续问题:

承诺的东西已经是一种尝试,但不起作用。我更愿意让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属性总是未定义的


如何将当前用户注入到我的用户模型中?

在注册之前,您不会等待用户从余烬数据返回。你可能想推迟准备拦截,直到它回来。试着这样做:

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();
    });
  }
});

我不确定您为什么要在模型中注入,在我的情况下,route/controller就足够了。还请注意,这是一个初始值设定项,而不是两个。

关于模型注入,实际上是可能的,请参见此处的答案


刚刚想出了另一个使用ember cli服务的解决方案。首先生成一个服务
ember g服务用户
。然后将
store
注入服务,以便执行
find()
。接下来,将您的服务从标准的
对象
更改为
对象代理
。最后,在
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/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));
    }
});