أعمل على إضافة (plugin) يحتاج إلى نوافذ حوار منبثقة (modal dialog)، وقد تعلمت من البحث في موقع Meta أن كلاً من مكون Ember وودجة Discourse يمكنهما تنفيذ ذلك. يمكن لكل من مكون Ember وودجة Discourse الارتباط بمخرج الإضافة (plugin outlet)، وعرض HTML، والتعامل مع الأحداث.
لم أتمكن من العثور إلا على موضوع واحد يتعلق بالودجات أعلاه، وقد ذكر فقط أن ودجة Discourse يمكنها العرض بشكل أسرع. لكنني وجدت أن نواة Discourse والعديد من الإضافات الأخرى تستخدم كلاً من مكون Ember وودجة Discourse. على سبيل المثال:
هل يمكن لأحد أن يخبرني ما الفرق بينهما؟
شكرًا لكم.
تُستخدم المكونات على نطاق واسع في معظم أجزاء Discourse. وتأتي الودجات (widgets) في متناول اليد في بعض العناصر الأكثر ازدحامًا بحركة المرور، مثل تدفق منشورات الموضوع والشريط العلوي مع قوائمه المتعددة.
غالبًا ما ستلاحظ استخدام الودجات في الإضافات والمواضيع لإضافة أو تعديل الودجات الموجودة.
خذ على سبيل المثال هذه الودجة في إضافة discourse-calendar:
هذه زر يتم عرضه في المنشور الأصلي لموضوع ما. ويجب أن تكون ودجة لأن المنشور نفسه يتم عرضه كودجة لأسباب تتعلق بالأداء.
لكن إذا نظرت إلى الأسطر من 11 إلى 17 في ذلك الملف، يمكنك رؤية قالب Handlebars مُعرَّف في JavaScript عبر مساعد hbs، وفي هذا القالب توجد مكونات يتم عرضها مثل {{i18n ...}}.
لذلك بشكل عام، يمكنك استخدام المكونات إلا إذا كان عنصر واجهة المستخدم مُعرضًا بالفعل كودجة. في هذه الحالة، استخدم ودجة. وإذا كان ذلك منطقيًا، يمكنك استخدام مكونات موجودة داخل الودجة.
إذا كنت تعرض عددًا كبيرًا منها، فمن المرجح أنك تريد اختيار الودجات لأجل الأداء.
الودجات أكثر محدودية من المكونات، وتتطلب معرفة أكبر لتحقيق عمل مثالي عند بناء واجهات مستخدم معقدة.
لذا، وبشكل أساسي، إذا لم يكن الأداء مصدر قلق، سأفضل استخدام المكونات. أما إذا كان الأداء مصدر قلق أو إذا اضطررت لذلك (مثلًا: استخدام واجهة برمجة التطبيقات للإضافة لتزيين ودجة أخرى)، فسأستخدم على الأرجح الودجات.