shoshber
(Shoshana Berleant)
26 مارس 2018، 8:30م
1
I need to modify a javascript controller (create-account). If I were writing it from scratch, I’d add a mixin called something like (FooValidation), the same way the mixins PasswordValidation and UsernameValidation are applied (discourse/app/assets/javascripts/discourse/controllers/create-account.js.es6 at f03b6bd8c925163b41b9e33b39484d102dbaee44 · discourse/discourse · GitHub ). I can’t figure out how, though.
I could just add the relevant properties/methods to the create account controller using PluginApi.modifyClass, but that doesn’t feel right, especially seeing as I’ll want to reuse the mixin.
What’s the best way to achieve this?
Osama
26 مارس 2018، 9:57م
2
I believe the modifyClass method accepts a mixin as an argument, so I’d try something like this:
api.modifyClass("controller:create-account", FooValidation);
shoshber
(Shoshana Berleant)
27 مارس 2018، 8:11م
3
Ah you’re right, modifyClass calls Ember’s reopen, which can take mixins as an argument. I couldn’t get it to work at first but I got it! Thanks!
Dev_Work
(Aleksandr)
17 ديسمبر 2019، 8:32م
4
هل يمكنك مشاركة بعض أمثلة الكود؟
أقوم بذلك في معاينات قائمة المواضيع: https://github.com/paviliondev/discourse-topic-previews/blob/master/assets/javascripts/discourse/initializers/preview-edits.js.es6
مثال محدد: api.modifyClass('component:topic-list', Settings);
لقد قمت بذلك لفصل الكود المشترك الذي كان سيتكرر لولا ذلك ويكون تقريبًا نسخة ولصق.