我正在尝试创建一个用户列表(与登录用户成为朋友),但我不知道如何将用户注入我的视图。
我尝试了多次注射:
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。也许注入当前用户是错误的方法,但我不知道更好的方法。
答案 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');