هل يمكنني استخدام routeAction في glimmer single-file components؟

يمكنني استخدام مساعد route-action في ملفات قوالب .hbs بهذا الشكل:

@action={{route-action "showLogin"}}

هل يمكنني استخدام نفس الإعلان في ملف قالب Glimmer؟ لقد جربت هذا ولكنه لا يعمل:

import { routeAction } from 'discourse/helpers/route-action';

[...]

{{on "click" routeAction "showLogin"}}
إعجابَين (2)

في مكون Glimmer، أعتقد أنك لا تحتاج إلى المساعد. يمكنك القيام بذلك مباشرة:

{{on "click" this.showLogin}}

إذا كنت بحاجة إلى تمرير وسيطات:

{{on "click" (fn this.showLogin <argument>)}}

سيبحث عن الإجراء:

@action
showLogin(<argument>, event) {}
3 إعجابات

شكراً @Arkshine! أعتقد أنني أفهم كيفية تمرير الإجراءات في مكون Glimmer بشكل عام. ومع ذلك، انتقل مساعد route-action عبر تسلسل المسار لاستدعاء إجراء غير معلن في النطاق المحلي. لذلك يمكنك فقط تعريفه في المكون، على سبيل المثال:

{{route-action "showLogin"}}
{{route-action "showCreateAccount"}}
{{route-action "composePrivateMessage"}}

يمكنني العمل فقط على القالب، وأهتم بشكل أقل بالمنطق المستدعى لأنه يتم تمريره تلقائيًا (من وجهة نظري :). وهو ما أعجبني، لكنني لا أفهم ما إذا كانت هذه هي أفضل ممارسة على الإطلاق وكيف يمكنني الوصول إليها الآن في مكون Glimmer.

أنت على حق؛ خطأي. :pensive: أجبت تلقائيًا دون تفكير كثير. (حسنًا، كانت الساعة 5 صباحًا :smile:).
ليس لدي إجابة لسؤالك في الوقت الحالي، لكنني سأعود إليك إذا اكتشفت شيئًا من جانبي!

إعجاب واحد (1)

من اختباري، ما يلي يعمل.

import { get } from "@ember/object";
import { routeAction } from "discourse/helpers/route-action";

{{on "click" (routeAction "showLogin" (get this "router._router"))}}

يفترض أن لديك خدمة router معرفة في المكون.

لست متأكدًا مما إذا كان يعتبر ممارسة سيئة. لا يبدو فكرة جيدة، لكنها تعمل. :smile:

3 إعجابات

شكراً مرة أخرى! أتفق على أنه يبدو غير احترافي بعض الشيء :smile: على الرغم من أنه لا يعمل معي أيضاً.. أحاول استبدال الإجراء في discourse-featured-lists/javascripts/discourse/components/featured-list.gjs at main · nolosb/discourse-featured-lists · GitHub

حسناً، قد أتخلى عنه في الوقت الحالي، المكون يعمل بشكل جيد كما هو. أحاول فقط فهم بعض الأشياء التي تعمل تحت الغطاء بشكل أفضل :mechanic:t4:

أعتقد أنه إذا استخدمت التصدير الافتراضي، فيجب أن يعمل كما هو متوقع (أي دون الحاجة إلى حقن خدمة الموجه، أو تمرير مرجع إليها يدويًا)

import routeAction from "discourse/helpers/route-action";

(لست متأكدًا من سبب وجود وظيفة داخلية تم تصديرها أيضًا باسم routeAction… مربكة جدًا! دعنا نصلح ذلك)

على الرغم من أنني أقول… بشكل عام نحن نحاول التحرك نحو “إجراءات الإغلاق” مثل {{on \"click\" this.someFunction}} بدلاً من الأشياء المستندة إلى السلاسل النصية مثل {{action \"blah\"}} أو {{routeAction \"blah\"}}.

3 إعجابات