إمبر.شبيبة-هذا.تعيين () في أبليكاتيونروت لا يعمل

StackOverflow https://stackoverflow.com//questions/23018742

  •  21-12-2019
  •  | 
  •  

سؤال

أحاول تعيين متغير منطقي كلما تم تسجيل دخول المستخدم.

App.ApplicationRoute = Ember.Route.extend({
  isLoggedIn: false,

  init: function() {
      if (loggedIn) {
        this.set('isLoggedIn', true);
      } else {
        console.log(error)
        this.set('isLoggedIn', false);
      }
    });
  }
});

ومع ذلك ، على this.set() أحصل على:

نوع غير معروف خطأ:غير معرف ليس وظيفة

أي أفكار?

اعتقدت أن أفضل مكان للتعامل مع جلسة المستخدم هو في App.ApplicationRoute منذ ذلك الحين جذر كل شيء.هل هذا يسبب مشكلة?

تحديث:مع ردود الفعل هنا هو رمز الحالي / الكامل.

App.ApplicationRoute = Ember.Route.extend({
  isLoggedIn: false,

  init: function() {
    this._super();

    auth = new FirebaseSimpleLogin(appRef, function(error, user) {
      if (user) {
        console.log(user)
        this.set('isLoggedIn', true);
      } else {
        console.log(error)
        this.set('isLoggedIn', false);
      }
    });
  }
})

لذلك تركت رمز فيريباس بلدي سابقا لأنني لم أكن أعتقد حقا أنها ذات الصلة ، ولكن من أجل تعقب المشكلة ، سأضيفه في.

هل كانت مفيدة؟

المحلول

السبب له علاقة مع

this

يتم ضبطه بشكل خاطئ في قواعد النار الخاصة بك.يجب أن يتم تمرير الوظيفة التي تستخدمها داخل المنشئ في إشارة إلى' هذا ' من السياق الخارجي.أسهل طريقة للقيام بذلك هي عن طريق تغيير رمز الوظيفة إلى هذا:

function(error, user) {
  if (user) {
    console.log(user)
    this.set('isLoggedIn', true);
  } else {
    console.log(error)
    this.set('isLoggedIn', false);
  }
}.bind(this));

نصائح أخرى

أول شيء أولا :)

كما جاء في إمبر.شبيبة دوكومناتيون:

ملاحظة:إذا كنت لا تجاوز الحرف الأول لفئة إطار مثل الجمرة.عرض أو الجمرة.أرايكونترولر, تأكد من استدعاء هذا._سوبر () في إعلان الحرف الأول الخاص بك!إذا لم تقم بذلك ، قد لا يكون إمبر فرصة للقيام بأعمال الإعداد الهامة ، وسترى سلوك غريب في التطبيق الخاص بك.

ثانيا ، الخاص بك loggedIn لم يتم الإعلان عن المتغير ولا إنشاء مثيل وبالتالي لاغية وكذلك الخاص بك error ولكن أعتقد أنك فقط مزق بعض التعليمات البرمجية من المشروع الخاص بك لعزف معا مثال سريع ، لذلك إذا كنت تفعل:

App.ApplicationRoute = Ember.Route.extend({
  isLoggedIn: false,

  init: function() {
      this._super(); // <-- call `this._super()` here

      if (loggedIn) {
        this.set('isLoggedIn', true);
      } else {
        console.log(error)
        this.set('isLoggedIn', false);
      }
    });
  }
});

يجب أن يعمل كل شيء كما هو متوقع :)

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