====== XBL ====== Mittels XBL können eigene XUL Tags erstellt werden. Codeteile die öfter in einer Applikation verwendet werden, können in einem XBL zusammengefasst werden und sorgen damit für übersichtlicheren und sauberen Code der nur an einer zentralen Stelle gewartet werden muss. **Vorteile** * wird nur 1x zentral erstellt * übersichlicherer Code * kann beliebig oft in der Anwendung verwendet werden * keine ID Konflikte **Nachteile** * komplexe aufwändigere Erstellung ===== Einbinden des XBLs ===== Das fertige Binding kann beispielsweise mit Hilfe einer Box eingefügt werden myapp.xul ===== CSS Definition des Bindings ===== Damit das Binding gefunden wird, muss dieses im Stylesheet definiert werden style.css box.MyBinding { -moz-binding: url('mybinding.xml#MyBinding'); } ===== Definition des Bindings ===== mybinding.xml Mein Binding ===== Methoden aufrufen innerhalb des XBLs ====== ===== Tree Cell Value ermitteln ===== try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); tree = document.getAnonymousElementByAttribute(this ,'anonid', 'mytree'); var col = tree.columns.getColumnFor(document.getAnonymousElementByAttribute(this ,'anonid', 'treecol-my_id')); return tree.view.getCellText(tree.currentIndex, col); } catch(e) { return false; } ===== Observer in XBLs ===== Bei der Verwendung von Observern wird oft eine Referenz auf das XBL benötigt. Diese kann so übergeben werden: myTreeDatasource.addXMLSinkObserver({ mybinding: this, onBeginLoad: function(aSink) {}, onInterrupt: function(aSink) {}, onResume: function(aSink) {}, onEndLoad: function(aSink) { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var tree = document.getAnonymousElementByAttribute(this.mybinding ,'anonid', 'mytree'); tree.builder.rebuild(); }, onError: function(aSink, aStatus, aErrorMsg) { alert("error! " + aErrorMsg); } }); ===== Callback Funktionen in XBLs ===== Bei der Verwendung von Callback Funktionen wird oft eine Referenz auf das XBL benötigt. Dies kann mit Hilfe von Closures gelöst werden: function mycallb(obj) { var me=obj; this.invoke=function (respObj) { try { var id = respObj.Body[0].save[0].message[0].Text; } catch(e) { var fehler = respObj.Body[0].Fault[0].faultstring[0].Text; alert('Fehler: '+fehler); return; } me.RefreshTree(); } } var cb=new mycallb(this); SOAPClient.SendRequest(sr,cb.invoke);