A discussion on the Discourse forum addresses a bug where api.modifyClass sometimes fails to add properties to the user model in theme components. Users RGJ, pfaffman, and merefield explore potential causes, including race conditions and missing pluginId. While adding pluginId helps, it doesn’t fully resolve the issue. RGJ discovers that adding `api.container.lookup(
On most pages this is working fine, but in some topics the property is not added to the user model when the page is reloaded. I cannot find why it is working on most topics, but not working on some, or what the topics where it is not working have in common.
Does anyone understand what I am doing wrong here?
TL;DR Adding api.container.lookup for the model, below the modifyClass, works around this issue.
It’s required on later versions, I actually submitted PRs for a couple themes yesterday to add this. I might be turning into a plugin/theme developer at long last
I thought perhaps if something else was modifying the class then it might be a race condition to see which one did it. But javascript is still mostly a mystery to me.
I’m not sure if these things are semantically identical …
… theoretically both should be evaluated when the browser refreshes, after which point a race condition should be moot on route transition as the modification should already have been applied …
Ok, I saw a notification from a helpful post that apparently has been removed in the meanwhile.
The suggestion did not work but it did contain a clue that helped me resolve this.
Adding the following snippet below the non-working code consistently resolved the issues I was having. I have tested this on multiple independent forums, both on stable and on tests-passed. I think this should be reclassified as Contribute > Bug …
I have added a console.log in the plugin API code app/assets/javascripts/discourse/app/lib/plugin-api.js so it logs whenever modifyClass is being called.
I have removed all external plugins to make sure there was not a conflict somewhere.
Repro:
create an empty forum on stable (so no Ember CLI). This is not working on tests-passed (without Ember CLI) either. I did not test this with Ember CLI.