Ember 识别当前用户
Ember identifying current user
我正在尝试使用 Ember CLI 和 rails API 后端,使用 simple-auth-devise 构建一个简单的聊天应用程序。我对 Ember 很陌生。我有以下设置:
- has_many 消息的对话模型。每条消息 belongs_to 一个用户。
- 加载对话并显示所有消息的conversations/show路由
我遇到的问题是确定哪些消息是由当前用户编写的。我可以识别路线中的当前用户并将其传递给控制器,但我不确定如何在模板中做一些以此为条件的事情。这是代码:
conversations/show的路线:
import Ember from 'ember';
export default Ember.Route.extend({
model: function(params) {
return this.store.find('conversation', params.conversation_id);
},
// Get the current user
setupController: function(controller, model){
this._super(controller, model);
var currentUser = this.get('session').get('currentUser');
controller.set("currentUser", currentUser);
}
});
然后在模板中我想做这样的事情:
{{#each message in messages}}
{{message.body}}
{{#if message.isByCurrentUser }}
Written by me!
{{/if}}
{{/each}}
我不知道如何或在哪里定义 message.isByCurrentUser 方法来使用路由中定义的 currentUser 变量。
非常感谢。
我建议您分离 message
资源,让它有自己的模板和控制器。
//messages.hbs
{{#each message in messages}}
{{render "message" message}}
{{/each}}
//message.hbs
{{message.body}}
{{#if isByCurrentUser }}
Written by me!
{{/if}}
//message controller
import Ember from 'ember';
export default Ember.Controller.extend({
currentUser: Ember.computed.alias('session.currentUser'),
isByCurrentUser: function() {
return this.get('model.creator.id') === this.get('currentUser.id');
}.property('model.creator', 'currentUser')
});
P.S:我假设您的消息模型具有名为 creator
的属性。根据您的型号进行更改
simple-auth
将会话注入控制器和路由,因此您不必显式设置它。
我正在尝试使用 Ember CLI 和 rails API 后端,使用 simple-auth-devise 构建一个简单的聊天应用程序。我对 Ember 很陌生。我有以下设置:
- has_many 消息的对话模型。每条消息 belongs_to 一个用户。
- 加载对话并显示所有消息的conversations/show路由
我遇到的问题是确定哪些消息是由当前用户编写的。我可以识别路线中的当前用户并将其传递给控制器,但我不确定如何在模板中做一些以此为条件的事情。这是代码:
conversations/show的路线:
import Ember from 'ember';
export default Ember.Route.extend({
model: function(params) {
return this.store.find('conversation', params.conversation_id);
},
// Get the current user
setupController: function(controller, model){
this._super(controller, model);
var currentUser = this.get('session').get('currentUser');
controller.set("currentUser", currentUser);
}
});
然后在模板中我想做这样的事情:
{{#each message in messages}}
{{message.body}}
{{#if message.isByCurrentUser }}
Written by me!
{{/if}}
{{/each}}
我不知道如何或在哪里定义 message.isByCurrentUser 方法来使用路由中定义的 currentUser 变量。
非常感谢。
我建议您分离 message
资源,让它有自己的模板和控制器。
//messages.hbs
{{#each message in messages}}
{{render "message" message}}
{{/each}}
//message.hbs
{{message.body}}
{{#if isByCurrentUser }}
Written by me!
{{/if}}
//message controller
import Ember from 'ember';
export default Ember.Controller.extend({
currentUser: Ember.computed.alias('session.currentUser'),
isByCurrentUser: function() {
return this.get('model.creator.id') === this.get('currentUser.id');
}.property('model.creator', 'currentUser')
});
P.S:我假设您的消息模型具有名为 creator
的属性。根据您的型号进行更改
simple-auth
将会话注入控制器和路由,因此您不必显式设置它。