Benutzer-Werkzeuge

Webseiten-Werkzeuge


xul_xbl

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

<box class="MyBinding" id="box-mybinding"/>

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<bindings xmlns="http://www.mozilla.org/xbl"
          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
		  xmlns:xbl="http://www.mozilla.org/xbl"
		  xmlns:html="http://www.w3.org/1999/xhtml"
		  >
   <binding id="MyBinding">
  	<content>
		<xul:vbox flex="1">
			<xul:description>Mein Binding</xul:description>
		</xul:vbox>
	</content>
 
	<implementation>
	</implementation>
  </binding>
</bindings>

Methoden aufrufen innerhalb des XBLs

<xul:textbox anonid="mytextbox" />
<xul:button onclick="document.getBindingParent(this).doSomething();" value="doSomething"/>
 
<implementation>
	<method name="doSomething">
		<body>
		<![CDATA[
			var val = document.getAnonymousElementByAttribute(this ,'anonid', 'mytextbox');
			alert(val);
		]]>
		</body>
	</method>
</implementation>

Tree Cell Value ermitteln

<property name="value">
	<getter>
		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;
		}
	</getter>
</property>

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);
xul_xbl.txt · Zuletzt geändert: 2013/04/13 18:23 (Externe Bearbeitung)