Ember识别当前用户

时间:2015-03-02 09:28:24

标签: ember.js

我正在尝试使用带有rails API后端的Ember CLI构建一个简单的聊天应用程序,使用simple-auth-devise。我对Ember很新。我有以下设置:

  • 具有多条消息的会话模型。每条消息都属于一个用户。
  • 加载对话并显示所有消息的对话/显示路线

我遇到的问题是弄清楚当前用户写的是哪些消息。我可以识别路由中的当前用户并将其传递给控制器​​,但我不知道如何在模板中做一些有条件的事情。这是代码:

会话路线/显示:

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变量。

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

我建议您分开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将会话注入控制器和路由,因此您无需明确设置它。