2016-04-22 13 views
1

Ich entwickle eine Single-Page-Anwendung in Clojurescript, und ich möchte TinyMCE als WYSIWYG-Editor für bestimmte Felder verwenden. Für die Raumeffizienz möchte ich eventuell das Projekt mithilfe des Google Clojure Compilers im erweiterten Modus minimieren. Da die Javascript-Dateien von tinymce dev für die Verwendung als externe Datei ungeeignet erscheinen, bin ich gezwungen, eigene Dateien zu schreiben.Clojurescript Extern für verschachtelte Funktion

Es gibt einen bestimmten Funktionsaufruf, den ich nicht ausführen kann. In clojurescript, nenne ich:

(.setContent (.get js/tinymce id) cont) 

, die ich würde kompilieren wie etwas vorstellen würde:

tinymce.get(id).setContent(cont); 

ich viele verschiedene Funktionsdefinitionen in meiner Externen versucht haben, aber ich halte einen Fehler bekommen:

TypeError: tinymce.get(...).Tl is not a function 

Welche sagt mir SetContent wird durch den Compiler verdeckt. Meine aktuelle externe Datei sieht wie folgt aus:

//all seems to be well here... 
var tinymce; 
tinymce.get = function(name){}; 
tinymce.remove = function(node){}; 
tinymce.init = function(editor){}; 
tinymce.on = function(name, callback, prepend, extra){}; 


//tinymce setContent attempts 
var tinymce.Editor; 
tinymce.Editor.prototype.setContent = function(content){}; 
tinymce.Editor.setContent = function(content){}; 
tinymce.get(name).setContent = function(content){}; 
tinymce.get(name).prototype.setContent = function(content){}; 

var Editor; 
Editor.prototype.setContent = function(content){}; 
Editor.setContent = function(content){}; 

die derzeit Art ist ein Einwurf alles-gegen-die-Wand-and-see-what-Sticks versuchen. Das Objekt get (name) returns sollte im Namespace ynymce.Editor liegen.

Gibt es eine geeignete Methode zum Schreiben von Externs, um diese verketteten Funktionsaufrufe zu erfassen? Oder gibt es eine Möglichkeit, das erste Code-Snippet neu zu schreiben, damit meine externen Benutzer die Funktionsnamen korrekt beibehalten? Danke im Voraus.

Antwort

0

Diese Zeile:

var tinymce.Editor; 

ist nicht syntaktisch korrekt in JS:

SyntaxError: missing ; before statement 

es entfernen und lassen Sie diese Zeile:

tinymce.Editor.prototype.setContent = function(content){}; 

Dies sollte gut funktionieren.

Auch Sie können immer zurückgreifen Eigenschaften über Stringliterale für den Zugriff auf die niemals umbenannt werden:

(require '[goog.object :as gobj]) 
(gobj/get your-object "i-wont-be-renamed")