Klassifizierung als Fehler.
Ich habe ein console.log im Plugin-API-Code app/assets/javascripts/discourse/app/lib/plugin-api.js hinzugefügt, damit protokolliert wird, wann immer modifyClass aufgerufen wird.
Ich habe alle externen Plugins entfernt, um sicherzustellen, dass es keine Konflikte gab.
Reproduktion:
-
Erstellen Sie ein leeres Forum auf
stable(also ohne Ember CLI). Dies funktioniert auch nicht auf tests-passed (ohne Ember CLI). Ich habe dies nicht mit Ember CLI getestet. -
Fügen Sie eine Themenkomponente mit Folgendem in Common - Head hinzu:
#1 Funktioniert
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
-
Laden Sie die Startseite
-
Die Konsole zeigt
modifyClass called for model:user _application-08d9058ddd37ba80992f770509f4919ad0738a17f14fb85167b1dc1f32f8b56e.js:23490:16 Object { pluginId: "test-tc", testFunction: testFunction() } -
Geben Sie
Discourse.currentUser.testFunction()in die Konsole ein -
“1” wird ausgegeben
#2 Schlägt fehl
- Gehen Sie zu einem Thema, z. B. ‘Welcome to Discourse’, und laden Sie die Seite neu
- Die Konsole zeigt dieselben “modifyClass called”-Logs an
- Geben Sie
Discourse.currentUser.testFunction()in die Konsole ein Uncaught TypeError: Discourse.currentUser.testFunction is not a functionwird ausgegeben
#3 Schlägt fehl mit Warnung
- Hängen Sie eine einzelne Zeile am Anfang der Themenkomponente an, sodass sie wie folgt aussieht:
const userModel = api.container.lookup("model:user");
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
- Gehen Sie zu einem Thema, z. B. ‘Welcome to Discourse’, und laden Sie die Seite neu
- Die Konsole zeigt dieselben “modifyClass called”-Logs an
- Die Konsole zeigt eine Warnung
„model:user“ wurde bereits im Container zwischengespeichert. Änderungen werden nicht angewendet. - Geben Sie
Discourse.currentUser.testFunction()in die Konsole ein Uncaught TypeError: Discourse.currentUser.testFunction is not a functionwird ausgegeben
#4 Funktioniert
- Verschieben Sie die Lookup-Zeile an das Ende der Themenkomponente, sodass sie wie folgt aussieht:
api.modifyClass('model:user', {
pluginId: 'test-tc',
testFunction: function() {
return 1;
}
});
const userModel = api.container.lookup("model:user");
- Gehen Sie zu einem Thema, z. B. ‘Welcome to Discourse’, und laden Sie die Seite neu
- Die Konsole zeigt dieselben “modifyClass called”-Logs an
- Geben Sie
Discourse.currentUser.testFunction()in die Konsole ein - “1” wird ausgegeben
