XBL:Dynamic Use Cases
Many XBL bindings have a simple content template that does not need to change over time and is the same for all bound elements; the binding may add a button or other UI to the bound element's presentation. However, there is another class of XBL binding which need to provide a presentation which is customized for each bound element through scripting. The following provides an example of such a binding and the XBL features it requires.
The binding takes an XML data structure and converts that structure into a chart presented using SVG. An typical dataset might look thus:
<?xbl href="/2dchart.xml" ?>
<html xmlns="xhtml">
<body>
<h1>Quarterly revenue for example.com</h1>
<chart xmlns="http://bindings.org/2dchart">
<axis label="Revenue" />
<group label="2005">
<data label="Q1" value="20" />
<data label="Q2" value="500" />
<data label="Q3" value="50000" />
<data label="Q4" value="180000" />
</group>
<group label="2006">
<data label="Q1" value="260000" />
</group>
</chart>
</body>
</html>
The desired presentation is an SVG image of a simple 2D bar chart. The binding allows the user to dynamically select other presentations, such as a line graph or two switch the axes.
<xbl xmlns="xbl" xmlns:chart="http://bindings.org/2dchart">
<binding id="2dchart" element="chart:2dchart">
<!-- The base shadow template only provides the root SVG element.
Children of the 2dchart do not have insertion points -->
<template>
<svg xmlns="svg" id="2dchartsvg" />
<button xmlns="xul" label="*" title="Change Chart Settings" />
</template>
<implementation>
return {
xblBindingAttached : function() {
var mysvg = this.shadowTree.getElementById("2dchartsvg");
var mybound = this.boundElement;
// Scripting here here to read the chart data and add data to the SVG
}
}
</implementation>
<handlers>
<handler event="DOMSubtreeModified">
// rebuild the SVG presentation
</handler>
</handlers>
</binding>
</xbl>