当前用户

时间:2015-07-21 04:28:35

标签: ember.js

我有点迷失,并努力寻找正确的信息来指导我。我有一个销售咖啡的应用程序,当用户登录时,我想将他们看到的数据过滤到他们分开的商店。

(在谈论咖啡店对象时,我将把STORE资本化,以帮助解决与余烬数据存储相关的混淆)

export default DS.Model.extend({
  user: DS.belongsTo('user'),
  active: DS.attr('boolean'),
  name: DS.attr('string'),
  extraShotPrice: DS.attr('number'),
  syrupPrice: DS.attr('number'),
});

这是我的STORE模型,它以简单的belongsTo关系链接到用户。

在我的后端,我有一个端点,可以正确返回当前用户对象,但是我在如何/在哪里可以将该用户正确加载到我的商店然后在控制器中使用它时有点迷失。

我需要做的第二件事是在到该用户的路线中过滤我的模型。

export default Ember.Route.extend({
  model: function(){
    // not sure where user.id would come from?
    return this.store.find('store', {'user': user.id})
  }
});

现在我只是对模型进行硬编码,因为我已经坚持了一段时间,并且一切都按照预期的硬编码值运行。

顺便说一句,STORE和用户有一对一的关系。谢谢你的任何建议!

2 个答案:

答案 0 :(得分:2)

对于Ember中的长期对象,服务可能是一个不错的选择(例如许多应用程序中的current_user。它实际上非常简单,我不知道为什么不再讨论它:

<强>服务/ session_service.js

export default Ember.Service.extend({
  currentUser: Ember.computed(function() {
    // however you fetch the user
    // I will just use some dummy data
    return Ember.Object.create({
      name: "Kori",
      workTitle: "Mr. Big Boss",
      skills: ["Ember", "Mentoring", "Ruby", "Refactoring"]
    });
  })
});

<强>控制器/ some_controller.js

export default Ember.Controller.extend({
  session: Ember.inject.service(),
  currentUser: Ember.computed.alias("session.currentUser")
});

模板中的用法:

<h2>User details:</h2>
<p>Title: ({{currentUser.workTitle}})</p>
<p>Name: {{currentUser.name}}</p>
<p>Mad Skills:</p>
<ul>
  {{#each currentUser.skills as |skill|}}
    <li>
      {{skill}}
    </li>
  {{/each}}
</ul>

在您的具体情况下,您最终可能会看到如下所示的路线:

export default Ember.Route.extend({
  session: Ember.inject.service(),
  model: function(){
    return this.store.find('store', {'user': this.get('session.currentUser.id')})
  }
});
然后你的强迫症开始了:

export default Ember.Route.extend({
  session: Ember.inject.service(),
  currentUserId: Ember.computed.alias('session.currentUser.id'),
  model: function(){
    return this.store.find('store', { 'user': this.get('currentUserId') })
  }
});

P.S。 store作为模特名称==没有乐趣!

示例codepen

答案 1 :(得分:0)

看起来你真的想要在你的Ember应用程序中进行某种会话,与你的后端协调。您可能不希望在每次转换时联系服务器。你有没有看过Simple Auth