質問

Emberjsアプリケーション内に認証を構築しようとしているので、ユーザーがログインした後、ローカルストレージを使用してユーザーIDとトークンを保存します。これは計画どおりに機能します。その後、プレイヤーがログインしているかどうかを判断するのに役立つコンピュータープロパティのセットアップを構築しました。

MyApp.ApplicationController = Ember.Controller.extend

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

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

ご覧のとおり、AuthManagerからデータを取得するだけです。私の大きな問題は、これらの計算されたプロパティが更新されず、アピケの変化でさえも更新されないことです。だから私はそれをデバッグしようとしました。

  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', ...) エンバールックアップグローバルパスのように window.AuthManager.accessToken それ以外の controllerInstance.AuthManager.accessToken したがって、コードをリファクタリングして使用します authManager.

setinterval それはまでに繰り返し実行するタイマーであるため、数回トリガーします clearInterval 返されたIDから呼び出されます setInterval

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top