문제

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는 전 세계 경로를 조심합니다 window.AuthManager.accessToken 대신에 controllerInstance.AuthManager.accessToken 따라서 코드를 리팩터링하여 사용하십시오 authManager.

setInterval 여러 번 트리거됩니다. clearInterval 반환 된 ID와 함께 호출됩니다 setInterval

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top