أنا أعمل على أول إضافة لي، وأريد أن أتمكن من الحصول على المحتوى النصي لمربع نص في لوحة المسؤول (جزء من الإضافة) بعد الضغط على زر. ثم، أريد أن أفعل بعض الأشياء بالمحتوى في Ruby. هل هناك طريقة لإرسال الواجهة الأمامية Ember البيانات مرة أخرى إلى الواجهة الخلفية Ruby؟
ملف plugin.rb الخاص بي:
# name: Discourse Sample Plugin
# about: A simple plugin to play around with
# version: 1.0.0
# authors: NateDhaliwal
# url: https://google.com
enabled_site_setting :plugin_enabled
add_admin_route 'sample_page.title', 'sample-page'
Discourse::Application.routes.append do
get '/admin/plugins/sample-page' => 'admin/plugins#index', constraints: StaffConstraint.new
end
ملف assets/javascripts/discourse/templates/admin/plugin-sample-plugin.hbs الخاص بي:
ملف assets/javascripts/discourse/controllers/admin-plugins-sample-plugin.js.es6 الخاص بي:
import Controller from "@ember/controller";
import { action } from "@ember/object";
export default class AdminPluginsSamplePlugin extends Controller {
@action
sendTextboxData() {
// How do I send the data?
}
}
إذا تمكنت من إرسال البيانات إلى الواجهة الخلفية Ruby، فأين أضع المنطق للتعامل مع البيانات؟ في plugin.rb؟ أو في ملف آخر؟
أم أن الإعداد سيكون مثالياً؟ ومع ذلك، فإن حالة الاستخدام الخاصة بي هي أن مربع النص لن يحتاج إلى الاحتفاظ بالقيم في كل مرة. هل يوفر yml هذه الوظيفة؟ هل يمكنني تغيير إعدادات الموقع من خلال Ruby؟
يبدو أن ما تبحث عنه هو إنشاء واجهة برمجة تطبيقات (API) في Ruby يمكن لـ JS استدعاؤها. أحد الأمثلة هو المكون الإضافي Data Explorer، الذي ينفذ واجهة برمجة تطبيقات لإدخال المستخدم بنطاق إذن المسؤول على جانب Ruby.
تعد JavaScript الخاصة بـ Data Explorer جزءًا أكبر من الأمور، لذا سأقدم مثالًا مبسطًا لما قد تحتاجه.
يمكنك القيام بنفس الشيء باستخدام fetch() الأصلية لـ JavaScript، ولكن يبدو أن الدالة ajax() التي توفرها Discourse تتعامل مع بعض الأشياء الصغيرة في الخلفية.
إذا كان كود Ruby الخاص بك خفيفًا بما يكفي، فيمكنك وضعه بالكامل ضمن ملف واحد لوحدة التحكم. وإلا، يمكنك تنظيمه بالطريقة التي تحتاجها.