Search the FirstSpirit Knowledge Base
Hallo Community,
wir versuchen für einen Kunden ein externes MAM über die AppCenter Integration einzubinden. Dieses MAM bietet eine schönen und mehr oder weniger komfortable Oberfläche für den Redakteur.
Das einzige Problem bei der ganze Sache ist nur, dass die Medien leider per Javascript in die Oberfläche nachgeladen werden. Das AppCenter kann somit leider nicht auf die Element im DOM zugreifen.
Hatte schon jemand ein ähnliches Problem und gibt es dazu evtl. einen Lösungsansatz?
Viele Grüße,
Jörn
Man kann über den AppCenter ein Javascript in die Seite einfügen, dass auf Änderungen am DOM lauscht und dann die Elemente entsprechend hervorhebt oder für Drag&Drop Operationen registriert.
JQuery bietet zum Beispiel solche Funktionen an, siehe http://api.jquery.com/live/
Alles klar. So kann ich per JavaScript erfassen, dass eine Änderung am Inhalt der Seite gemacht worden ist. Wir triggere ich dann aber aus dem JavaScript heraus die "register"-Methode um diese Elemente in der AppCenter-Integration als notwendige Elemente zu erfassen?
Viele Grüße aus Bielefeld,
Jörn
Mittels Java/JavaScript Proxy eine Brücke zwischen Java und Javascript erstellen, siehe http://www.e-spirit.com/odfs50/dev/de/espirit/firstspirit/client/gui/applications/browser/BrowserApp..., java.lang.String)
Ein Objekt zur Verfügung stellen das eine z.B. die Element-Id eines HTML-Objektes per Javascript an die Javawelt übergibt. Dort mittels http://www.e-spirit.com/odfs50/dev/de/espirit/firstspirit/client/gui/applications/BrowserNodeHandler... die Elemente registrieren.
D.h. als, dass ich mit folgendem Aufruf zurande kommen sollte? Richtig?
onDocumentComplete(String url) {
browserApplication.inject(this, "javaClient");
browserApplication.executeScript("$$('div.thumbnailview')[0].observe('DOMNodeInserted',function(evt){node = evt.relatedNode; if (node.className.indexOf('thumbnailviewrecord') !== -1) {javaClient.registerNewElement(node.id);}});");
}
registerNewElements(String id){
builder = browserApplication.createNodeHandlerBuilder();
builder.setElementDecorator(this);
builder.setActionProvider(this);
builder.setDragListener(this);
handler = builder.bind();
result = browserApplication.getCurrentDocument().getElementById(id);
if (result != null) {
handler.register(childNode, null);
}
}
Ja, auf den ersten Blick sieht das gut aus. Wobei es reicht den Handler 1x zu binden, das muss nicht für jedes Element neu gemacht werden.