الوصول إلى المتغيرات في موصل

أنا ممتاز في إدارة الأنظمة. لست سيئًا في العمل مع Rails. أما مع JavaScript و Ember و CSS، فأنا أشبه الإنسان البدائي.

في إضافة (plugin) تهدف إلى تغيير من يمكنه إرسال الرسائل الخاصة، أحاول إضافة زر إلى صفحة الملف الشخصي عندما لا يملك المستخدم صلاحية إرسال رسالة خاصة. يمكنني إضافة النص في المكان الذي أرغب فيه تمامًا من خلال وضع المحتوى في assets/javascripts/discourse/templates/connectors/user-summary-stat/my-clever-name.hbs. (كان هناك احتفال كبير!).

أرى أن الملف الموجود في https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/user/messages.hbs#L3 يستخدم

    {{#if showNewPM}}

أود استخدام هذا الشرط في my-clever-name.hbs، لكن المتغير غير مُعرَّف.

أعتقد أنني ربما أحتاج إلى إنشاء ملف my-clever-name.js.es6 في نفس المجلد الذي يحتوي على ملف hbs الخاص بي، وتضمين… شيء ما، و/أو إضافة بعض الكود الذي يُعرِّف هذا المتغير حتى أتمكن من الوصول إليه، لكنني أعيدت قراءة دليل المطور عدة مرات، وحاولت محاكاة الكود في بعض الإضافات التي تبدو وكأنها تفعل الشيء نفسه، دون أن أرى بالضبط كيفية القيام بذلك.

مرحبًا جاي،

لقد سمعتُ أشخاصًا يقولون إن EmberJS هي “لغة بحد ذاتها”!

ما تحتاجه هو خاصية محسوبة:

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

https://github.com/paviliondev/discourse-zspace/blob/cc8893c14a9b1c5d4f6552f8f6b12ea9ac7ac643/assets/javascripts/discourse/components/activity-file-edit.js.es6#L10

إذن، هل يجعل @discourseComputed("uploading") من الممكن استخدام uploading في قالب hbs؟ أشبه بما يلي في Ember:


fullName: computed('firstName', 'lastName', function() {
    return `${this.firstName} ${this.lastName}`;
  })

إذن، هل سأقوم بإنشاء assets/javascripts/discourse/components/my-plugin.js.es6 وأقوم بتمديد… شيء ما…؟ يبدو أن هناك طريقة يمكنني من خلالها ببساطة “تفعيل” نفس المتغيرات التي يتمتع القالب الآخر الذي أقوم بتمديده بالوصول إليها. آه! ربما يؤدي تمديد “ذلك الشيء” في المكون الخاص بي إلى جعل هذه المتغيرات متاحة لي؟

هل يجب أن أستسلم وأرجع للخلف وأقضي أسبوعًا في دورة Ember التعليمية؟

إذن، هذا يقوم بإعداد خاصية محسوبة تُسمى ‘fullName’ يتم تحديثها عند أي تغيير في ‘firstName’ أو ‘lastName’. وتصبح القيمة المُرجعة هي قيمة هذه الخاصية.

شكرًا لك على صبرك!

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

assets/javascript/discourse/components/user-private-messages.js.es6:

import discourseComputed from "discourse-common/utils/decorators";
import User from "discourse/controllers/user";

export default Ember.Component.extend(User, {
    classNames: ["restrict-pms"],
    myFunThing: "this is text in my fun thing",
    @discourseComputed("myvalue")
    someThing(myvalue) {
        return true;
    }
});

Template.registerHelper("log", function(something){
    console.log(something);
});

أعتقد أن ما أسأله، وقد لا يكون منطقيًا، هو ما الذي يمكنني وضعه في assets/javascripts/discoures/templates/connectors/user-profile-controls/add-link-to-subscription.hbs لكي أتمكن من الوصول إلى myFunThing أو myvalue؟

يمكن أن تشير القالب الذي يتوافق مع مكون js الخاص بك إلى الخاصية المحسوبة ببساطة عن طريق تضمينها داخل قوسين مزدوجين:

{{fullName}}

الكود أعلاه موجود في assets/javascript/discourse/components/user-private-messages.js.es6.

وأود أن أتمكن من استخدام {{myFunThing}} و/أو {{myvalue}} في assets/javascripts/discourse/templates/connectors/user-profile-controls/add-link-to-subscription.hbs، لكنهما غير مُعرَّفين.

أعتقد أن أحد هذين الملفين في المكان الخطأ (أرى أن النصوص الأخرى في ملف hbs أعلاه تُعرض في /u/username/summary، ولكن بدون myFunThing)، أو أنني أستورد الفئة الخطأ و/أو أقوم بتوسيع المكوّن الخطأ.

عذرًا يا جاي، أنا مشغول قليلًا، لكن ما يمكنك فعله هو ببساطة ربط المكون الخاص بك في ملف hbs داخل ملف connector.hbs على سبيل المثال:

{{my-component}}

(أضف الحجج حسب الحاجة)

ستقوم بعد ذلك بالبحث عن my-component.hbs في templates/components و /components.

بدلاً من ذلك، يجب أن تتمكن من تعيين الخاصية في ملف js داخل مجلد connector، لكن بالنسبة لأسلوبي، أفضل الطريقة الأولى.

أعلم أن هذا من عام مضى، ولكن هل تمكنت من حل هذه المشكلة يا @pfaffman؟

أرجو ألا يكون هذا للمشروع نفسه (غير المكتمل)، ولكن إليك:

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/assets/javascripts/discourse/templates/pfaffmanager-servers-show.hbs

الذي يستدعي:

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/assets/javascripts/discourse/templates/components/server-item.hbs

وأعتقد:

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/assets/javascripts/discourse/controllers/pfaffmanager-servers-show-item.js.es6