我正在尝试在我的Emberjs应用程序中构建一些身份验证,因此在用户登录后,我使用本地存储保存用户ID和一个令牌。按计划起作用,我然后建立了一个设置的计算属性,以帮助确定玩家是否已登录。

MyApp.ApplicationController = Ember.Controller.extend

  currentUser: (->
    @AuthManager.get('apiKey.user')
  ).property('AuthManager.apiKey')

  isAuthenticated: (->
    @AuthManager.isAuthenticated
  ).property('AuthManager.apiKey')

如您所见,只需从我的Authmanager获取数据即可。现在,我的最大问题是这些计算的属性不会更新,即使是Apikey的更改也是如此。所以我试图调试它。

  currentUser: (->
    @AuthManager.get('apiKey.user')
  ).property('AuthManager.apiKey')

  isAuthenticated: (->
    #@AuthManager.isAuthenticated
    console.log "Something changed to " + @get('AuthManager.apiKey.accessToken')

    self = @
    setInterval ->
      console.log self.get('AuthManager.apiKey.accessToken')
    , 1000
  ).property('AuthManager.apiKey.accessToken')

首先,Apikey是未定义的,但是在加载用户后,设置了Apikeys,但属性未能看到此更改。

这是代码的输出。

enter image description here

如您所见,Apikeys的变化,但是“更改为“更改”的东西”仅印刷一次?

我究竟做错了什么?

有帮助吗?

解决方案

我认为您的问题是因为 AuthManager 从大写字母开始,当您使用时 @set('AuthManager.accessToken', ...) Ember查找A的全球路径, window.AuthManager.accessToken 代替 controllerInstance.AuthManager.accessToken 因此,重构您的代码仅使用 authManager.

setInterval 触发几次,因为这是一个反复执行直到的计时器 clearInterval 被称为,带有来自返回的ID setInterval

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top