计算属性未更新

时间:2013-12-03 14:28:52

标签: javascript ember.js coffeescript

我正在尝试在我的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的变化,但是“Something changed to”只打印了一次?

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为您的问题是因为AuthManager以大写字母开头,当您使用@set('AuthManager.accessToken', ...) ember查找全局路径时,如window.AuthManager.accessToken而不是controllerInstance.AuthManager.accessToken所以重构您的代码只使用authManager

setInterval会多次触发,因为它是一个反复执行的计时器,直到clearInterval被调用,返回的ID来自setInterval