ember.js - 如何设置 Ember Controller 属性

标签 ember.js

我正在查看的 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/

相关文章:

javascript - EmberJS 从 ember-simple-auth 验证器检索当前用户

json - Ember.js with Rails accepts_nested_attributes_for 和多态 has_many/belongs_to

javascript - 自定义对象上的 Ember 绑定(bind)

Ember.js 应用离线行为

ember.js - 将自定义适配器与 Ember CLI 中的特定模型相关联

javascript - Ember-DS queryRecord 返回 TypeError : Cannot convert undefined or null to object

javascript - 如何仅通过某些对象填充 Ember.js 的 Select?

javascript - 如何在 Ember 中创建一个可以包装/操作内容的 Handlebars block 助手?

javascript - 向 Ember 适配器添加动态变量?

google-maps - Ember.js + 具有多个自定义标记的 Google map 公司 map 应用程序