أشعر أنني على الأرجح أفتقد شيئًا واضحًا هنا، لكنني لا أستطيع اكتشافه. لدي مكون سمة يقوم بتحميل بعض الأدوات (widgets)، وأستخدم الكود التالي لإعادة عرضها بعد أن ينتقل المستخدم إلى صفحة جديدة (مأخوذ من لافتات التصنيفات):
ومع ذلك، ينتظر هذا الكود حتى يتم تحميل الصفحة الجديدة لتحديث الأداة. ما آمل في تحقيقه هو إخفاء محتوى الأداة فورًا عند النقر على رابط للانتقال إلى صفحة أخرى، تمامًا كما تفعل وظيفة Discourse الأصلية في إخفاء العناصر وإظهار مؤشر تحميل (spinner) فور النقر.
أرى في ملف app\assets\javascripts\discourse\app\templates\discovery.hbs أن حاوية div تراقب متغير “loading”، لكنني لا أستطيع معرفة مصدره وكيفية “الالتحاق” به أو مراقبة حالة التحميل في الأداة الخاصة بي.
أقدر أي إجابات أو مجرد توجيهي إلى الاتجاه العام الصحيح.
@hawm لست متأكدًا من أن إعادة تصيير الطابور هو ما أحتاجه هنا، لأن الأمر لا يتعلق بإعادة تصيير أدواتي، بل يتعلق بمنح أدواتي وعيًا بما إذا كان تطبيق Discourse العالمي يقوم بتحميل صفحة جديدة أم لا.
نعم، بالطبع. أنا لا أعاني من صعوبة في بناء جملة if/then؛ ما أطلبه هو معرفة ما إذا كان هناك طريقة للتحقق مما إذا كان Discourse يقوم حاليًا بتحميل صفحة جديدة.
يأتي متغير loading من مسار discovery الذي ذكرته أعلاه. قد لا تتمكن الودجت المرفقة بـ plugin-outlet من الوصول إليه لأنها لا تُمرر كحجة، وهذا يعتمد على تعريف plugin-outlet.
تمكّنتُ أخيرًا من العثور على حل. قضيتُ وقتًا طويلاً جدًا في هذا، وبالنسبة لي يستحق دمج هذا الحل في النواة (core) لأنّه في رأيي كان يجب أن يكون موجودًا هناك أساسًا.
أضفتُ الكود أدناه إلى مكوّن السمة (theme component) الخاص بي؛ ما يفعله هو إضافة فئة “loading” إلى وسم body بمجرد بدء التوجيه (routing)، ثم إزالتها بمجرد اكتمال التوجيه. ربما يكون هذا الأمر بسيطًا أو بديهيًا للأشخاص الذين يعرفون Ember، لكنه استغرق مني وقتًا طويلاً بشكل فاضح (ومحاولة ملايين الأشياء + قراءة جميع المواضيع التي تمكنت من العثور عليها هنا) لفهمه.
مع وجود هذا الكود الأساسي، يمكنني إضافة أيقونات التحميل وغيرها إلى مختلف الأدوات (widgets) الخاصة بي، بحيث يتحكّم وجود فئة CSS المسماة loading في وسم body في تنسيق CSS الخاص بها وإمكانية رؤيتها.