我正在查看的 Ember 应用程序的应用程序模板使用条件检查来确定要显示哪些链接
{{#if isAuthenticated}}
link
{{else}}
link...
{{/if}}
isAuthenticated 属性是根据用户是否注册/登录有条件地设置的
App.AuthController = Ember.ObjectController.extend({
currentUser: null,
isAuthenticated: Em.computed.notEmpty("currentUser.email"),
login: function(route) {
var me;
me = this;
return $.ajax({
url: "/users/sign_in.json",
type: "POST",
data: {
"user[email]": route.currentModel.email,
"user[password]": route.currentModel.password
},
success: function(data) {
me.set('currentUser', data.user);
return route.transitionTo('user', data.user);
该应用程序能够毫无问题地处理注册和登录,但是,应用程序模板始终显示用户未经身份验证时的链接。根据您在此处看到的代码,是否存在某些原因导致 isAuthenticated 在登录时无法更新?
最佳答案
如果 @mavilein 和 @chopper 允许我发布明确的答案以完全解决这个问题,那么就这样:
应用程序 Controller
由于您的 ApplicationController
是备份您的应用程序模板的,因此您应该使用 needs
API 请求 AuthController
,如下所示:
App.ApplicationController = Ember.ObjectController.extend({
needs: ['auth']
...
});
应用模板
然后,您可以访问所有 AuthController
的属性,并在访问时添加 controllers.auth
前缀,因此您可以在应用程序模板中执行以下操作:
{{#if controllers.auth.isAuthenticated}}
link
{{else}}
link...
{{/if}}
如果您不喜欢长名称,还有一个快捷方式:
App.ApplicationController = Ember.ObjectController.extend({
needs: ['auth'],
isAuthenticated: Ember.computed.alias('controllers.auth.isAuthenticated')
...
});
这样做后,您就可以在应用程序模板中简单地执行以下操作:
{{#if isAuthenticated}}
link
{{else}}
link...
{{/if}}
在本例中指的是 ApplicationController
isAuthenticated
属性,该属性又是根据原始 Controller AuthController
计算得出的。
希望有帮助。
关于ember.js - 如何设置 Ember Controller 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18962911/