读取由 ember.js 中带有车把的服务注入的计算 属性
Reading a computed property injected by a service with handlebars in ember.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'));
}
}
});
模板没有变化(尽管当您用 unless
切换 if
时会出现测试)。让这一切变得陌生的是,当我单击 test
按钮时,它成功触发了 isAuthenticated 的结果。为什么我无法将此 属性 从我的 js 文件传输到我的 hbs 文件?
您需要在控制器中定义属性;帐户路线是否有控制器?路线上的道具(model
除外)对模板不直接可见。
另一种方法是创建一个包装帐户模板的组件;如果您不想要或希望保持较小的规模,则可以在其中注入身份验证服务而不是控制器。
请注意,我们团队所做的一件事是自动将身份验证服务(或者更确切地说,等效的会话服务)注入所有组件;你可以用初始化器来做到这一点。这在一定程度上减少了样板文件。
我正在尝试使用通过自定义身份验证服务注入的计算 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'));
}
}
});
模板没有变化(尽管当您用 unless
切换 if
时会出现测试)。让这一切变得陌生的是,当我单击 test
按钮时,它成功触发了 isAuthenticated 的结果。为什么我无法将此 属性 从我的 js 文件传输到我的 hbs 文件?
您需要在控制器中定义属性;帐户路线是否有控制器?路线上的道具(model
除外)对模板不直接可见。
另一种方法是创建一个包装帐户模板的组件;如果您不想要或希望保持较小的规模,则可以在其中注入身份验证服务而不是控制器。
请注意,我们团队所做的一件事是自动将身份验证服务(或者更确切地说,等效的会话服务)注入所有组件;你可以用初始化器来做到这一点。这在一定程度上减少了样板文件。