أنا أضيف مكونًا إلى before-topic-list-body. أحتاج إلى الحصول على بعض البيانات إما من الفئة أو الموضوع (وسأضيف البيانات التي أريدها إلى أي مُسلسِل يبدو منطقيًا أكثر).
لقد قضيت بضع ساعات في هذا وقررت أنني في حيرة من أمري وهناك فرصة جيدة لأن تكون هذه مشكلة تستغرق 2-5 دقائق لتقديم تلميح أحتاجه.
أتذكر بشكل غامض التفكير أو سماع شيء عن هذا من قبل، لكنني عالق.
شكرا لك، @Lilly! ليست فكرة سيئة، لكنني كنت أخشى أن يكون currentUser شيئًا ينطبق على الصفحة بأكملها، وليس فقط حيث يتم إدراج المكون، وأعتقد أنني على حق. لرؤية ما كان متاحًا بهذه الطريقة، قمت بالبحث في المكونات الإضافية الرسمية وحصلت على هذه القائمة من الخدمات (لو كنت ذكيًا كنت سأعرف كيفية العثور عليها في مصدر discourse، لكنني لست كذلك):
لذا يمكنني استخدام parentView و _parentView للعودة إلى الموضوع! هذا هو السحر الذي أبحث عنه، (والذي أعتقد أنه سيحل مشكلة أخرى في مشروع آخر أيضًا). الآن كل ما أحتاج إلى القيام به هو وضع الأشياء في وحدة تحكم الموضوع، وكلها آمل أن تكون أشياء أعرف (على الأقل في الغالب) كيفية القيام بها!
هل طبع هذا رسالة تحذير في وحدة التحكم؟ كان ينبغي أن يفعل ذلك، لأننا سنزيل الوصول إلى parentView من PluginOutlet على الفور. في الواقع، إنه غير موصى به لدرجة أنه يجب أن يعرض لافتة تحذير للمسؤولين في واجهة المستخدم
إذا لم ترَ أي تحذيرات، فيرجى إخبارنا!
(parentView هو جزء من نظام المكونات الكلاسيكي في Ember، والذي نبتعد عنه)
إذا كنت ترغب في الوصول إلى معلومات من أعلى في الشجرة، فيجب إما تمريرها كوسيطة إلى Plugin Outlet، أو تحتاج إلى استخدام إحدى الخدمات المتاحة (مثل currentUser أو router)
أوه، أفهم ما حدث. أنت تستخدم ._parentView، وليس .parentView. يسمح لك الإصدار ذو الشرطة السفلية بتجاوز رسالة الإهمال. ولكن لا يزال، سيتوقف عن العمل في غضون الأسابيع القليلة القادمة.
يمنع طلب الدمج هذا هذا النوع من الحلول البديلة، لذلك سيرفع كل من .parentView و ._parentView رسالة الإهمال:
آه. حسنًا. إذن هل يمكنني استخدام router للوصول إلى الموضوع أو الفئة؟ ما أعتقد أنني بحاجة إلى القيام به هو إدخال تلك ratingOptions في مسلسل الموضوع أو الفئة حتى أتمكن من إضافة تقييمات الموضوع المتعددة هذه إلى قائمة الموضوعات حتى يمكن تقييم هذه الأشياء دون الدخول إلى الموضوعات (من المفترض أن يكون الناس على دراية بها بالفعل، لذلك لن يحتاجوا إلى الدخول إلى الموضوع لمعرفة ما يصوتون عليه).
إذًا outletArgs يعني أنه موجود الآن في this الخاص بالشيء؟ (هذا ما يبدو عليه الأمر - اعتقدت أنني سأحتاج إلى البحث في args بطريقة ما . . .)
إذًا في ملف hbs الخاص بالموصل الخاص بي، يمكنني الوصول إلى this.topic ثم يمكنني استدعاء المكون الخاص بي على هذا النحو:
<RatingOne @name="one" @topic={{this.topic}}/>
ثم في ملف hbs الخاص بمكون RatingOne (سيتم إعادة تسميته يومًا ما إلى rating فقط لأنني اكتشفت كيفية تمرير الأشياء إليه) يمكنني
هذا هو الموضوع {{this.topic.id}} {{this.topic.title}}
هذا هو معرف الفئة: {{this.topic.category_id}})
والحصول على معلومات الموضوع!
والآن أرى الموضوع، والآن يمكنني الذهاب لإضافة وسائطي إلى مُسلسل الموضوع، صحيح؟ (قد يكون من الأفضل تمريره فقط إلى الفئة . . . أو ربما سأمرر فقط قيمة “doTheThing” في المُسلسل وأحصل على الأشياء الفعلية من SiteSettings، حيث أعتقد أنهم يريدون هذا على مستوى الموقع وليس الفئة).
ما لم أكن قد تعثرت بطريقة ما على شيء آخر تم إيقافه، يبدو أنك قد فعلتها. شكرًا جزيلاً.
هذا يتعلق بـ “كيف أجعل الأشياء تعمل في Glimmer، لذلك سأحتفظ بهذا هنا.”
أحتاج إلى استدعاء هذا الكود بعد عرض كل موضوع لإعادة ترتيب عناصر <td>. لقد استخدمت above-topic-item، والذي يضع التقييمات قبل عنوان الموضوع. هذا الحل البدائي يعيد ترتيب عناصر <td> بمساعدة بعض جافاسكريبت.
// document.addEventListener("DOMContentLoaded", function() {
// const table = document.querySelector('table.topic-list.ember-view');
// const rows = table.getElementsByTagName('tr');
// // todo: this needs to get called on page load
// for (let row of rows) {
// const cells = Array.from(row.getElementsByTagName('td'));
// cells.sort((a, b) => {
// const orderA = parseInt(window.getComputedStyle(a).order, 10);
// const orderB = parseInt(window.getComputedStyle(b).order, 10);
// return orderA - orderB; });
// for (let cell of cells) {
// row.appendChild(cell);
// }
// }
// });
أعتقد أنني “فقط” بحاجة إلى استدعاء شيء مثل afterRender أو شيء آخر بدلاً من الشيء على مستوى المستند الذي لدي. ربما الموجه؟