api.modifyClass تعمل أحيانًا (!) بشكل غير صحيح

إعادة تصنيف هذا على أنه خطأ.

لقد أضفت console.log في كود واجهة برمجة تطبيقات المكون الإضافي app/assets/javascripts/discourse/app/lib/plugin-api.js حتى يتم تسجيل كلما تم استدعاء modifyClass.

لقد قمت بإزالة جميع المكونات الإضافية الخارجية للتأكد من عدم وجود تعارض في مكان ما.

إعادة الإنتاج:

  • إنشاء منتدى فارغ على stable (بدون Ember CLI). هذا لا يعمل أيضًا على tests-passed (بدون Ember CLI). لم أختبر هذا مع Ember CLI.

  • إضافة مكون سمة مع هذا في Common - Head

#1 يعمل


    api.modifyClass('model:user', {
      pluginId: 'test-tc',
      testFunction: function() {
        return 1;
      }
    });

  • تحميل الصفحة الرئيسية

  • تعرض وحدة التحكم modifyClass called for model:user _application-08d9058ddd37ba80992f770509f4919ad0738a17f14fb85167b1dc1f32f8b56e.js:23490:16 Object { pluginId: "test-tc", testFunction: testFunction() }

  • أدخل Discourse.currentUser.testFunction() في وحدة التحكم

  • تتم طباعة “1”

#2 فشل

  • انتقل إلى موضوع، على سبيل المثال “Welcome to Discourse” وأعد تحميل الصفحة
  • تعرض وحدة التحكم نفس سجلات “modifyClass called”
  • أدخل Discourse.currentUser.testFunction() في وحدة التحكم
  • تتم طباعة Uncaught TypeError: Discourse.currentUser.testFunction is not a function

#3 فشل مع تحذير

  • أضف سطرًا واحدًا إلى أعلى مكون السمة ليبدو كالتالي:

    const userModel = api.container.lookup("model:user");

    api.modifyClass('model:user', {
      pluginId: 'test-tc',
      testFunction: function() {
        return 1;
      }
    });

  • انتقل إلى موضوع، على سبيل المثال “Welcome to Discourse” وأعد تحميل الصفحة
  • تعرض وحدة التحكم نفس سجلات “modifyClass called”
  • تعرض وحدة التحكم تحذيرًا \"model:user\" was already cached in the container. Changes won't be applied.
  • أدخل Discourse.currentUser.testFunction() في وحدة التحكم
  • تتم طباعة Uncaught TypeError: Discourse.currentUser.testFunction is not a function

#4 يعمل

  • انقل سطر البحث إلى أسفل مكون السمة ليبدو كالتالي:

    api.modifyClass('model:user', {
      pluginId: 'test-tc',
      testFunction: function() {
        return 1;
      }
    });

    const userModel = api.container.lookup("model:user");

  • انتقل إلى موضوع، على سبيل المثال “Welcome to Discourse” وأعد تحميل الصفحة
  • تعرض وحدة التحكم نفس سجلات “modifyClass called”
  • أدخل Discourse.currentUser.testFunction() في وحدة التحكم
  • تتم طباعة “1” :partying_face:
4 إعجابات