لدي مكون Glimmer. إنه يعمل. لكنني أحتاجه ليأتي بعد المنشور الأول في موضوع. لا يوجد منفذ إضافي هناك.
لقد اكتشفت كيفية إدراج بعض النصوص في innerHTML الخاص بعلامة <article>، وهذا يضع هذا النص في المكان الذي أريده، ولكن لا يبدو أن هناك طريقة للقيام بذلك باستخدام مكون.
هل فاتني شيء؟
نظرت في كيفية قيام adplugin بإدراج الإعلانات بين المنشورات، لكنني لم أتمكن من فهمها تمامًا.
يتم تمرير المنشور كأحد وسائط المخرج، لذا يمكنك التحقق من post.post_number == 1
هاها! يسعدني دائمًا المساعدة في هذا النوع من الأسئلة. من الأفضل للجميع إذا تمكنا من جعل السمات والإضافات تستخدم واجهات برمجة التطبيقات القياسية مثل هذه بدلاً من الحلول البديلة للأدوات (والتي سيتم إيقافها في المستقبل غير البعيد).
نعم هذا عادل. إضافتها داخل الأدوات تمثل صداعًا في الجانب الأساسي. ولكن من جانب السمة/الإضافة يجب أن تكون نظيفة للغاية
سأحاول اكتشاف فشل الاختبارات هذه والحصول على طلب السحب (PR) مدمج غدًا. (يبدو أن عنصر HTML الإضافي يعبث ببعض المحددات الهشة في اختبارات qunit)
أخشى أنني كنت متفائلًا بعض الشيء هنا يا @pfaffman، آسف! سيكون لـ PR الذي قدمته مقدمة غلاف جديد <div> بين كل مشاركة، حتى لو لم يتم استخدام المنفذ. هذا ليس شيئًا نريده حقًا.\n\nقد تكون هناك طرق لتجنب الغلاف… ولكن لا شيء بسيط يمكننا القيام به على الفور.\n\nلذلك أعتقد أن أفضل حل فوري لك سيكون نسخ تطبيق adplugin الذي أشرت إليه في OP.\n\n[quote="Jay Pfaffman, post:1, topic:303282, username:pfaffman"]\nلكنني لم أتمكن من فهمه تمامًا\n[/quote]\nبشكل أساسي:\n\n1. قم بإنشاء مكون (Glimmer أو كلاسيكي، لا يهم) يقوم بعرض ما تريده\n\n2. استخدم registerWidgetShim لجعله متاحًا كمكون واجهة. يقوم مثال adplugin بإنشاء واجهة تسمى “after-post-ad”، والتي تعرض المكون PostBottomAd. يتم تمرير جميع سمات الواجهة (@data) إلى الوسيط @model للمكون.\n\n3. استخدم api.decorateWidget لعرض واجهة الواجهة الجديدة الخاصة بك في موضع post:after. في حالتك، نظرًا لأنك تريده فقط في المشاركة الأولى، يمكنك القيام بشيء مثل\n\n js\n api.decorateWidget(\"post:after\", (helper) => {\n if(helper.widget.model.post_number === 1){\n return helper.attach(\"my-widget-shim\");\n }\n });\n \n\nعندما نقوم بـ glimmer-ify لصفحة الموضوع في النهاية، ستحتاج إلى إزالة واجهة الواجهة/الديكور، واستبدالها بمنفذ إضافة. يجب أن يكون ذلك سهلاً للغاية، حيث سيتم إعادة استخدام كل منطق العرض الخاص بك في المكون في منفذ الإضافة.\n\nأخبرنا كيف تسير الأمور! يسعدنا المساعدة في أي أسئلة متابعة - أعرف أن هناك الكثير من الأجزاء المتحركة هنا.
في هذه الحالة، لا أعتقد أنك ستحتاج إلى استيراد فئة Service. هذا لن يكون ضروريًا إلا إذا كنت تنشئ خدمة خاصة بك. أنت تحتاج فقط إلى المُزخرف الحقن service.
وفي أحدث إصدار من Discourse/Ember، يمكن تبسيطه أكثر لتجنب الحاجة إلى الاسم المستعار ‘inject as’. الآن تجعل Ember المُزخرف الحقن متاحًا مباشرة باسم service.
import { service } from "@ember/service";
(لكن { inject as service } القديم لا يزال يعمل، وأنا لست على علم بأي خطط لإيقافه في Ember)
تحرير: ولكن ربما يمكنني استخدام decorateWidget بدلاً من plugin outlet. . .