ember.js - 如何将 currentUser 注入(inject)所有其他用户模型

标签 ember.js ember-data

在我的应用程序中,我有几个可以成为 friend 的用户。现在我正在尝试构建一个函数,该函数将“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 注入(inject)并观察属性,只要当前用户被解决,属性就会发生变化。因此,我的尝试:
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');
  }
});

我已经尝试过使用类型注入(inject)和常规注入(inject)。但在我的用户模型中,我的 currentUser 属性始终未定义。

如何将当前用户注入(inject)我的用户模型?

最佳答案

在注册之前,您无需等待用户从 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();
    });
  }
});

我不确定您为什么要注入(inject)模型,在我的情况下,路由/ Controller 就足够了。另请注意,这是一个初始化程序,而不是两个。

关于ember.js - 如何将 currentUser 注入(inject)所有其他用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20952274/

相关文章:

javascript - 在 Ember 中保存到服务器时更改模型的 JSON 根

ember.js - 新的 Ember 应用程序与 Ember 1.12.2

javascript - Firefox/Firebug 不显示抛出的错误消息

ember.js - 如何卸载 Ember-Data 中的所有模型

ember.js - Ember 数据批量获取异步有很多关系记录

javascript - 带查询参数的 Ember 转换

java - 对客户端和服务器端验证使用相同的逻辑

ember.js - Ember 多选语法

javascript - Ember js 如何强制重新加载特定的选定记录?

ember.js - ember-data v1.0.0中的单表继承