ما الذي يتحكم في ترتيب التنفيذ لملفات j/s الخاصة بمكونات Theme؟

لدي JavaScript في سُمّتي (هل أصبحت مشهورًا بعد؟ ;)) وهو يحوّل الـ DOM بإضافة عناصر عبر api.decorateCooked(…. يقوم بإدراج مجموعة متنوعة من عناصر رأس HTML.

لدي أيضًا مكون سمة DiscoTOC المثبت.

ومع ذلك، فإن إضافة <div data-theme-toc="true"> </div> المعتادة التي يلاحظها DiscoTOC ويقوم بتوسيعها، لا تولّد جدول محتوى يتضمن العناصر التي أضيفت ديناميكيًا.

أعتقد أن الأمر قد يكون بسيطًا مثل ترتيب التنفيذ… إذا نظر DiscoTOC قبل أن يضيف JavaScript عناصر إضافية . . .

ما الذي يحدد ترتيب التنفيذ إذا كانت عدة أجزاء من كود سمة JavaScript تستدعي api.cooked(؟

3 إعجابات

تذكير؟ :slight_smile:

بالإضافة إلى بعض المرح للوصول إلى 20 حرفًا

يُرجى ملاحظة أن DiscoTOC يعمل فقط على محتوى المنشورات - إذا قمت بإدراج هذه العناصر خارج المنشورات، فلن يتمكن من رؤيتها.

لا أعتقد أننا احتجنا حتى الآن إلى تحديد ترتيب تنفيذ JavaScript.

إعجاب واحد (1)

أقوم بالتضمين داخل المنشور، نعم. لهذا السبب أشك في ترتيب التنفيذ.

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

أنا متأكد إلى حد كبير أن ترتيب تنفيذ المكوّن لا يعتمد على اسم المكوّن. بل يعتمد افتراضيًا على المعرف (ID).

ومع ذلك، يمكنك تحديد ترتيب مبدئي (initializer) لحالات الاستخدام المتقدمة. يمكنني وضع DiscoTOC في مبدئي مُسمّى حتى تتمكن من تشغيل كودك قبل DiscoTOC، لكنني أحتاج أولًا إلى معرفة ما تحاول تحقيقه لأعطيك إجابة واضحة.

هل تعديلاتك هنا مبنية على طلب HTTP/AJAX، صحيح؟

إعجاب واحد (1)

نعم، AJAX، لكن باستخدام استدعاء متزامن. (لطالما أحببت التناقض الظاهري في مصطلح AJAX المتزامن :^)

أشعر أن خطوتي التالية هي إنشاء مكون مناسب — حاليًا، إنه مجرد كود JavaScript ملصق في رأس القالب الخاص بي. ثم يمكنني تجربة التعديل على معرف (ID) مختار بعناية. ربما يكون “_foo” أو “0-foo” هو كل ما أحتاجه.

إعجاب واحد (1)

أليس كذلك جميعًا؟ :wink:

صحيح. إذا كنت تريد استخدام المولدات المسمّاة وترتيب التهيئة، فسيحتاج مكونك إلى وجود مُهيّئ في مجلد /javascript.

لكن لا تقلق، يمكنني المساعدة في كل ذلك. سأعود إليك غدًا بإجابة كاملة حول هذا الموضوع.

إعجاب واحد (1)

منذ فترة، قمت بتحويل اختراق j/s الخاص بي إلى مكون سمة مناسب.

أود العودة إلى الحصول على الترتيب بحيث يعمل المكون الخاص بي قبل جدول محتويات Discourse.

على حد علمي، يتم تقييم مكونات السمات (Theme Components) بعد الإضافات (plugins).

وقد أكون مخطئًا، ولكن يتم تحميلها بترتيب الأسماء، لذا فإن وضع x- أمام الاسم ساعدني في الماضي على ضمان تقييم مكون سمة معين في النهاية.

لا بأس. أحاول التحكم في ترتيب مكون DiscoTOC ( https://github.com/discourse/DiscoTOC.git ) ومكون من إنشائي الخاص.

تشير الردود من الآخرين أعلاه إلى أن اسم المكون لا يؤثر على ترتيب التنفيذ. لقد أعدت تسميتها للتو إلى aa-mycomponent و x-last-DiscoTOC ولم ينجح ذلك. [DiscoTOC لا يتضمن العناوين المضافة إلى DOM ديناميكيًا - نعم، داخل نص المنشور]

https://forum.moversmindset.com/t/list-of-movers-mindset-podcast-episodes/1160

@Johani هل لديك أي أفكار أخرى من مسار تفكيرك في شهر مايو؟

همممم… ربما الخطأ أكثر من مجرد ترتيب. لقد قمت للتو بفحص… والأشياء الموجودة في DOM والتي كنت أعتقد أنها عناوين HTML… هي في الواقع علامات DIV مع class="d-toc-ignore"

حان الوقت لأتعمق أكثر. أين ذهبت العناوين الخاصة بي؟ :slight_smile:

حسنًا، أعتقد أنه يمكنك إثبات ذلك بأي من الطريقتين من خلال تجربة مثال بسيط جدًا.

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

من الواضح جدًا أنه مرتب حسب الاسم في الكود هنا في النموذج:

إعجاب واحد (1)

لا يؤثر الاسم على ترتيب التنفيذ. @merefield يؤثر السطر الذي ربطته على كيفية عرضها في واجهة المستخدم الإدارية، ولكنه لا يُستخدم للتنفيذ الفعلي.

هذا هو السطر ذي الصلة لترتيب التنفيذ:

لذلك يتم تنفيذها بترتيب تصاعدي لـ “id” في قاعدة البيانات.

الضمان الوحيد الذي يمكن نقله عبر مثيلات Discourse هو أن كود theme يتم تنفيذه دائمًا قبل كود theme component.

كما ذكر @Johani أعلاه، إذا كنت بحاجة إلى تشغيل الكود بعد تحميل مكون آخر، فإن أفضل رهان هو على الأرجح استخدام تهيئة Ember، والتي تدعم الترتيب. للأسف، لن يكون ذلك ممكنًا على الفور في هذه الحالة، نظرًا لأنه لا يبدو أن DiscoTOC يستخدم تهيئات Ember. سيؤدي تحديث DiscoTOC لاستخدام JavaScript متعدد الملفات (وبالتالي تهيئات Ember) بالتأكيد إلى الترحيب بـ pr-welcome.

3 إعجابات

هذا مؤسف لأنه قد يكون مفيدًا. شكرًا للتوضيح على أي حال!

إعجاب واحد (1)

(وهذا يتعلق بـ Theme component order of precedence)

فقط أعود لأقول إن ترتيب الأسبقية لمعرف قاعدة البيانات يعمل؛ يحل حاجتي. شكراً للجميع!

إعجابَين (2)