text: if(!dojo._hasResource["dojox.dtl.contrib.data"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  dojo._hasResource["dojox.dtl.contrib.data"] = true;
  dojo.provide("dojox.dtl.contrib.data");
  dojo.require("dojox.dtl._base");
  
  (function(){
  	var dd = dojox.dtl;
  	var ddcd = dd.contrib.data;
  
  	ddcd._BoundItem = dojo.extend(function(item, store){
  		this.item = item;
  		this.store = store;
  	},
  	{
  		get: function(key){
  			var store = this.store;
  			var item = this.item;
  
  			if(key == "getLabel"){
  				return store.getLabel(item);
  			}else if(key == "getAttributes"){
  				return store.getAttributes(item);
  			}else if(key == "getIdentity"){
  				if(store.getIdentity){
  					return store.getIdentity(item);
  				}
  				return "Store has no identity API";
  			}else{
  				if(store.hasAttribute(item, key)){
  					var value = store.getValue(item, key);
  					return (dojo.isObject(value) && store.isItem(value)) ? new ddcd._BoundItem(value, store) : value;
  				}else if(key.slice(-1) == "s" && store.hasAttribute(item, key.slice(0, -1))){
  					return dojo.map(store.getValues(item, key.slice(0, -1)), function(value){
  						return (dojo.isObject(value) && store.isItem(value)) ? new ddcd._BoundItem(value, store) : value;
  					});
  				}
  			}
  		}
  	});
  
  	ddcd.BindDataNode = dojo.extend(function(items, store, alias){
  		this.items = new dd._Filter(items);
  		this.store = new dd._Filter(store);
  		this.alias = alias;
  	},
  	{
  		render: function(context, buffer){
  			var items = this.items.resolve(context);
  			var store = this.store.resolve(context);
  			if(!store){
  				throw new Error("data_bind didn't receive a store");
  			}
  
  			var list = [];
  			if(items){
  				for(var i = 0, item; item = items[i]; i++){
  					list.push(new ddcd._BoundItem(item, store));
  				}
  			}
  
  			context[this.alias] = list;
  			return buffer;
  		},
  		unrender: function(context, buffer){
  			return buffer;
  		},
  		clone: function(){
  			return this;
  		}
  	});
  
  	dojo.mixin(ddcd, {
  		bind_data: function(parser, text){
  			var parts = dd.text.pySplit(text);
  
  			if(parts[2] != 'to' || parts[4] != 'as' || !parts[5]){
  				throw new Error("data_bind expects the format: 'data_bind items to store as varName'");
  			}
  
  			return new ddcd.BindDataNode(parts[1], parts[3], parts[5]);
  		}
  	});
  
  	dd.register.tags("dojox.dtl.contrib", {
  		"data": ["bind_data"]
  	});
  })();
  
  }
  