将用户注入视图

时间:2014-02-24 21:17:40

标签: ember.js

我正在尝试创建一个用户列表(与登录用户成为朋友),但我不知道如何将用户注入我的视图。

我尝试了多次注射:

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) {
    // .... here are some other injections missing
    container.injection('view:default', 'currentUser', 'user:current');
    container.typeInjection('view', 'currentUser', 'user:current');
    container.injection('view:friendselect', 'currentUser', 'user:current');
  }
});

无论我如何尝试将我的用户注入我的视图,它在我的内容绑定中都不可用。 我的观点现在有这个丑陋的解决方法:

GambifyApp.FriendSelectView = Ember.CollectionView.extend({

    init: function(){

        this.set('currentUser',this.container.lookup('user:current'))
        this.set('content', this.get('currentUser.friends'));
        return this._super()
    },
    // templateName: 'user',
    contentBinding: 'currentUser.friends',
    // userBinding: 'App.User',
    tagName: 'ul',
    emptyView: Ember.View.extend({
        template: Ember.Handlebars.compile("You have no friends")
    }),
    itemViewClass: Ember.View.extend({
        // userBinding: 'parentView.users',
        templateName: 'friend_select'
    })
});

我在这个问题中解释了我的整个用例:https://stackoverflow.com/questions/21999494/view-design-for-a-list-of-checkboxes-in-order-to-select-users。也许注入当前用户是错误的方法,但我不知道更好的方法。

1 个答案:

答案 0 :(得分:1)

我在我的应用程序中做了类似的事情,但我没有为当前用户发出API请求,而是在加载并从那里序列化数据时将它们嵌入到页面的HTML中。尽管如此,这部分内容仍可能与您相关。由于您的视图可以访问控制器,因此您应该能够将用户注入控制器而不是视图。在你的第二个例子中,我会尝试这样的事情:

我有一个CurrentUser控制器:

App.CurrentUserController = Ember.ObjectController.extend({});

然后在我的应用程序初始化程序中,我创建了一个用户实例,将CurrentUserController的内容设置为该实例,然后将该控制器注入我应用程序中的所有控制器:

user = store.find('user', 1);

// Put the user instance into the content variable of CurrentUserController
controller = container.lookup('controller:currentUser').set('content', user);

// Perform typeInjection on all the controllers in our app to give them
// currentUser variable so that we don't need to set it manually.
container.typeInjection('controller', 'currentUser', 'controller:currentUser');