ich habe gestern angefangen, ein Backend-Plugin zu schreiben, um bei den Kategorien einen neuen Tab einzufügen. Ausgangspunkt war die Doku Backend extensions
Ich habe mir die Codeblöcke aus der Webseite in meine Dateien ziemlich 1:1 einkopiert, halt soweit angepasst, das in der Kategorie-App ein weiterer Tab angezeigt werden soll. Ergebnis beim Öffnen der Kategorien:
Unexpected token :
Ich habe dann das Beispiel direkt heruntergeladen und installiert. Das hat (natürlich ) funktioniert. Daraufhin habe ich mein Plugin rausgenommen und das Beispiel so umgeschrieben, das der neue Tab in der Kategorie ist. Das hat auch funktioniert. Dann habe ich den Code “aufgeräumt”, also aus meiner Sicht unnötige Kommentare und Leerzeilen etc. raus. Und siehe da:
Unexpected Token :
Also wieder zurück zur “Kunden-Version”, auch da den Code “aufgeräumt” => gleiches Ergebnis.
Über den JavaScript-Debugger habe ich dann festgestellt, dass das hier generiert wurde:
Der my_own_controller.js und my_own_tab.js wurden also einfach oben “abgeschnitten” und so ungültiger Code erzeugt! Sobald ich in den beiden Dateien die ursprünglichen Leerzeilen am Anfang wieder eingefügt habe, lief es wieder (und dann auch entsprechend mit meinem “eigenen” Code.
Frage: Warum ist das so? Gibt’s da eine Regel die ich nicht sehe? Das ist ja nicht bei allen *.js und Blöcken so. Eine der Dateien braucht auch 6 Leerzeilen, die andere “nur” 3 oder 4, damit nix abgeschnitten wird. Ich vermute auch mal stark, dass das nicht so sein sollte, weil sowas macht die Backend-Plugin-Entwicklung natürlich… “spannend”
Wenn Du nun also so einen Block erweiterst (prepend), wird der Inhalt Deiner JS in den Block geschrieben, also hinter dem Doppel-Slash - und wenn Deine JS-Datei bis zum ersten Zeilenumbruch relevanten Code hat, zählt er als Kommentar, und “fehlt” dem Script.
Erklärt jetzt aber nicht, warum es mehr als eine Leerzeile sein muss - ggf. Windows-Codierung vom New-Line ?
Mach mal am Anfang der Datei etwa 5 Leerzeilen dann wirds funktionieren
Hi, ja, wie oben schon gesagt, dann funktionierts. Die Frage war, warum, bzw. warum so viele?
@sonic seine Antwort erklärt das teilweise (also warum man eine Leerzeile nötig ist). Das erklärt auch die Kommentarzeichen am Ende. (Eigentlich irgendwie logisch, wenn man drüber nachdenkt )
Aber warum die (Leer-)Zeilenanzahl variiert, ist immer noch nicht ganz klar. Die Theorie mit Windows- vs. Linux-New-Line werde ich heute Abend mal testen…
Also, die Dateien hatten tatsächlich Windows-\r\n als Zeilentrenner. Ich habe PHPStorm so eingestellt, das er jetzt immer Linux-\n nutzt (SW läuft ja auf einem Linux-Server). Es scheint sich jetzt soweit „normalisiert“ zu haben, das in der my_own_tab.js und my_own_controller.js 2 Leerzeilen nötig sind.
initComponent: function() {
var me = this;
me.items = [{
xtype: 'label',
html: 'Hello world'
}];
me.callParent(arguments);
}
});
Wenn man sich an diese Regel halten kann… ok. Aber mir leuchtet immer noch nicht ein, warum es mehr als eine Leerzeile braucht. Ebensowenig, warum ganz ohne Leerzeilen nur die Ext.define-Zeile abgeschnitten wird und nicht auch die extend: bzw. override:-Zeile.
Ich nehme das jetzt erstmal so hin. Funktioniert ja dann soweit. Über eine belastbare Erklärung wäre ich trotzdem noch froh