shoshber
(Shoshana Berleant)
March 26, 2018, 8:30pm
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 (https://github.com/discourse/discourse/blob/f03b6bd8c925163b41b9e33b39484d102dbaee44/app/assets/javascripts/discourse/controllers/create-account.js.es6#L13 ). 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
March 26, 2018, 9:57pm
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);
4 Likes
shoshber
(Shoshana Berleant)
March 27, 2018, 8:11pm
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!
2 Likes
Dev_Work
(Aleksandr)
December 17, 2019, 8:32pm
4
can you share some sample code?
merefield
(Robert)
December 17, 2019, 10:03pm
5
I do it in Topic List Previews: https://github.com/paviliondev/discourse-topic-previews/blob/master/assets/javascripts/discourse/initializers/preview-edits.js.es6
Specific example: api.modifyClass('component:topic-list', Settings);
I did this to break out shared code that would otherwise have been repeated and almost a cut and paste.
3 Likes