我正在尝试在我的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已设置,但属性无法看到此更改。
这是代码的输出。
正如你可以看到apiKeys的变化,但是“Something changed to”只打印了一次?
我做错了什么?
答案 0 :(得分:0)
我认为您的问题是因为AuthManager
以大写字母开头,当您使用@set('AuthManager.accessToken', ...)
ember查找全局路径时,如window.AuthManager.accessToken
而不是controllerInstance.AuthManager.accessToken
所以重构您的代码只使用authManager
。
setInterval会多次触发,因为它是一个反复执行的计时器,直到clearInterval
被调用,返回的ID来自setInterval