سؤال

أحاول بناء بعض المصادقة في تطبيق EmberJS الخاص بي ، لذلك بعد قيام المستخدم بتسجيل الدخول ، أقوم بحفظ معرف المستخدم ورمزًا باستخدام التخزين المحلي. يعمل هذا كما هو مخطط له ، ثم قمت بإنشاء خصائص محسوبة للمساعدة في تحديد ما إذا كان اللاعبون قد قاموا بتسجيل الدخول.

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', ...) ember lookup المسار العالمي ، مثل window.AuthManager.accessToken بدلاً من controllerInstance.AuthManager.accessToken لذا refactor الكود الخاص بك لاستخدامه فقط authManager.

setInterval الزناد عدة مرات ، لأنه مؤقت ينفذ مرارًا وتكرارًا حتى clearInterval يسمى ، مع الهوية التي تم إرجاعها من setInterval

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top