في كل مرة تنشئ أو تُثبّت سمة أو مكونًا، يقوم Discourse بتعيين معرف (ID) له. إذا قمت بزيارة صفحة ذلك المكون، فستجد المعرف في عنوان URL (الرقم في النهاية)

عند إضافة هذا المكون إلى سمتك، يبدو أن ترتيب تنفيذه يعتمد على معرفه - على مستوى بسيط جدًا (عند تسجيل السجل في وحدة التحكم دون أي تأخير). إذن، سيعمل 233 قبل 234 وهكذا.
يعمل هذا الأمر في معظم الحالات لأن التغييرات اللاحقة تُضاف عادةً في مكونات جديدة، لذا يعمل كل شيء بسلاسة.
على المدى الطويل، يمكننا جعل الترتيب يحترم قائمة المكونات التي أضفتها إلى السمة
لكن هذا غير مدرج في أي خطة طريق حاليًا.
ما تحتاجه حقًا هو ترتيب مبدئي (initializer order). لا أعتقد أنه يمكنك تحقيق ذلك إلا إذا نقلت كودك إلى الطريقة الجديدة لإنشاء ملفات JavaScript الخاصة بالسمات. تتيح لك هذه الطريقة إعطاء اسم للمبدئي وتحديد ترتيب تنفيذه. على سبيل المثال، لنفترض أن لدي هذا الملف
/javascripts/discourse/initializers/initialize-for-foo.js
ويبدو كما يلي
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("foo")
});
}
}
ولدي مبدئ آخر يبدو كما يلي
/javascripts/discourse/initializers/initialize-for-bar.js
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "bar",
initialize() {
withPluginApi("0.8.7", api => {
console.log("bar")
});
}
}
إذا أردت التأكد من أن bar يعمل بعد foo، يمكنني إضافة وسيطة after: إليه، مما يضمن عمله بعد اسم المبدئي الذي أمرره هناك. إذن، لجعل bar يعمل بعد foo، سأفعل ذلك في
/javascripts/discourse/initializers/initialize-for-bar.js
import { withPluginApi } from "discourse/lib/plugin-api";
export default {
name: "bar",
+ after: "foo",
initialize() {
withPluginApi("0.8.7", api => {
console.log("bar");
});
}
};