读取由ember.js中具有把手的服务注入的计算属性

时间:2017-06-15 17:30:00

标签: javascript ember.js handlebars.js

我试图通过使用通过自定义身份验证服务注入的计算isAuthenticated属性来改变我的手柄脚本。在my-application组件中,通过以下代码可以解决一些问题:

      {{#if isAuthenticated}}
        <li>{{#link-to "accounts.my-account"}}My Account{{/link-to}}</li>
        <li>{{#link-to "accounts.search-accounts"}}Find other Medici Users{{/link-to}}</li>
      {{/if}}

import Ember from 'ember';

export default Ember.Component.extend({
  auth: Ember.inject.service(),
  user: Ember.computed.alias('auth.credentials.email'),
  isAuthenticated: Ember.computed.alias('auth.isAuthenticated'),

  actions: {
    signOut () {
      this.sendAction('signOut');
    },
  },
});

当我尝试在不同的位置(在这种情况下,帐户路由)中实现这个完全相同的代码时:

<button type="btn" {{action "test"}}>test</button>

{{#if isAuthenticated}}
<p>test</p>
{{/if}}

{{outlet}}

import Ember from 'ember';

export default Ember.Route.extend({
  auth: Ember.inject.service(),
  user: Ember.computed.alias('auth.credentials.email'),
  isAuthenticated: Ember.computed.alias('auth.isAuthenticated'),

  actions: {
    test () {
      console.log(this.get('user'));
      console.log(this.get('isAuthenticated'));
    }
  }
});

模板没有变化(虽然当您使用if切换unless时会出现测试。让这一切变得陌生的是,当我点击test按钮时,它成功触发了isAuthenticated的结果。为什么我无法将此属性从我的js文件传输到我的hbs文件?

1 个答案:

答案 0 :(得分:2)

您需要在控制器中定义属性;账户路线是否有控制器?路径上的道具(from Tkinter import * root = Tk() root.geometry("300x200") root.configure(bg='#252525', relief=SOLID, bd=2) canvas = Canvas(root, width=200, height=100, bg='white') canvas.place(x=50, y=50, width=200, height=100) text = Text(root) text.place(x=50, y=70, width=200, height=60) text.config(bg='gray') canvas.create_line(170, 0, 170, 700, width='5', fill='green') mainloop() 除外)不会直接显示在模板上。

另一种方法是创建一个包装帐户模板的组件;你可以在那里注入auth服务而不是控制器,如果你不想要一个或想要保持小。

请注意,我们团队所做的一件事就是自动将auth服务(或者更确切地说,等效的会话服务)注入到所有组件中;你可以使用初始化器完成此操作。这有点减少了样板。