5

我正在查看的 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 在登录时不会更新?

4

1 回答 1

8

如果@mavilein 和@chopper 允许我发布一个明确的答案以完全涵盖这个问题,那么它就是这样:

应用控制器

由于您ApplicationController是备份应用程序模板的人,因此您应该像这样AuthController使用needsAPI:

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是从原始控制器计算的属性AuthController

希望能帮助到你。

于 2013-09-23T20:08:05.687 回答