Blame | Last modification | View Log | RSS feed
if(!dojo._hasResource["dojox.widget.Iterator"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.dojo._hasResource["dojox.widget.Iterator"] = true;dojo.provide("dojox.widget.Iterator");dojo.require("dijit.Declaration");dojo.experimental("dojox.widget.Iterator"); // level: prototype, designed for dijit.chat.demo/*example:from markup:| <span dojoType="dojo.data.ItemFileReadStore"| jsId="cstore" url="countries.json"></span>|| <div>| <div dojoType="dojox.widget.Iterator" store="cstore"| query="{ name: 'A*'}">| ${name} is a ${type}| </div>| </div>example:programmatic:| var store = new dojo.data.ItemFileReadStore({ url: "countries.json" });|| var iter = new dojox.widget.Iterator({| store: store,| template: ""| });|example:programmatic from an array of objects:| var dataArr = [| { name: "foo", valueAttr: "bar" },| { name: "thinger", valueAttr: "blah" }| ];|| var iter = new dojox.widget.Iterator({| data: dataArr,| template: ""| });example:programmatic from an array of strings:| var dataArr = [| { name: "foo", valueAttr: "bar" },| { name: "thinger", valueAttr: "blah" }| ];|| var iter = new dojox.widget.Iterator({| data: dataArr,| template: ""| });*/dojo.declare("dojox.widget.Iterator",[ dijit.Declaration ],{constructor: (function(){var ctr = 0;return function(){this.attrs = [];this.children = [];this.widgetClass = "dojox.widget.Iterator._classes._"+(ctr++);}})(),start: 0,fetchMax: 1000,query: { name: "*" },attrs: [],defaultValue: "",widgetCtor: null,dataValues: [], // an array of stringsdata: null, // should be a reference to an Arraystore: null,_srcIndex: 0,_srcParent: null,_setSrcIndex: function(s){this._srcIndex = 0;this._srcParent = s.parentNode;var ts = s;while(ts.previousSibling){this._srcIndex++;ts = ts.previousSibling;};},postscript: function(p, s){// figure out the position of the source node in it's parentthis._setSrcIndex(s);// this._srcIndex = dojo.query(">", this._srcParent).indexOf(s);this.inherited("postscript", arguments);var wc = this.widgetCtor = dojo.getObject(this.widgetClass);this.attrs = dojo.map(wc.prototype.templateString.match(/\$\{([^\s\:\}]+)(?:\:([^\s\:\}]+))?\}/g),function(s){ return s.slice(2, -1); });dojo.forEach(this.attrs,function(m){ wc.prototype[m] = ""; });this.update();},clear: function(){if(this.children.length){this._setSrcIndex(this.children[0].domNode);}dojo.forEach(this.children, "item.destroy();");this.children = [];},update: function(){if(this.store){// we're executing a querythis.fetch();}else{// we came from an array of objects. Easier!this.onDataAvailable(this.data||this.dataValues);}},_addItem: function(/*Object*/config, idx){if(dojo.isString(config)){config = { value: config };}var widget = new this.widgetCtor(config);this.children.push(widget);dojo.place(widget.domNode, this._srcParent, this._srcIndex+idx);},getAttrValuesObj: function(item){var obj = {};if(dojo.isString(item)){dojo.forEach(this.attrs, function(attr){obj[attr] = (attr == "value") ? item : this.defaultValue;}, this);}else{dojo.forEach(this.attrs, function(attr){if(this.store){obj[attr] = this.store.getValue(item, attr)||this.defaultValue;}else{obj[attr] = item[attr]||this.defaultValue;}}, this);}return obj;},onDataAvailable: function(data){this.clear();// console.debug(data);dojo.forEach(data, function(item, idx){this._addItem(this.getAttrValuesObj(item), idx);}, this);},fetch: function(query, start, end){this.store.fetch({query: query||this.query,start: start||this.start,count: end||this.fetchMax,onComplete: dojo.hitch(this,"onDataAvailable"),});}});dojox.widget.Iterator._classes = {};}