diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/mobile/_DataListMixin.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/mobile/_DataListMixin.js | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/mobile/_DataListMixin.js b/js/dojo-1.7.2/dojox/mobile/_DataListMixin.js new file mode 100644 index 0000000..0252329 --- /dev/null +++ b/js/dojo-1.7.2/dojox/mobile/_DataListMixin.js @@ -0,0 +1,134 @@ +//>>built +define("dojox/mobile/_DataListMixin", [ + "dojo/_base/array", + "dojo/_base/connect", + "dojo/_base/declare", + "dojo/_base/lang", + "dijit/registry", // registry.byId + "./ListItem" +], function(array, connect, declare, lang, registry, ListItem){ + + // module: + // dojox/mobile/_DataListMixin + // summary: + // Mixin for widgets to generate the list items corresponding to the + // data provider object. + + return declare("dojox.mobile._DataListMixin", null,{ + // summary: + // Mixin for widgets to generate the list items corresponding to + // the data provider object. + // description: + // By mixing this class into the widgets, the list item nodes are + // generated as the child nodes of the widget and automatically + // re-generated whenever the corresponding data items are modified. + + // store: Object + // Reference to data provider object + store: null, + + // query: Object + // A query that can be passed to 'store' to initially filter the + // items. + query: null, + + // queryOptions: Object + // An optional parameter for the query. + queryOptions: null, + + buildRendering: function(){ + this.inherited(arguments); + if(!this.store){ return; } + var store = this.store; + this.store = null; + this.setStore(store, this.query, this.queryOptions); + }, + + setStore: function(store, query, queryOptions){ + // summary: + // Sets the store to use with this widget. + if(store === this.store){ return; } + this.store = store; + this.query = query; + this.queryOptions = queryOptions; + if(store && store.getFeatures()["dojo.data.api.Notification"]){ + array.forEach(this._conn || [], connect.disconnect); + this._conn = [ + connect.connect(store, "onSet", this, "onSet"), + connect.connect(store, "onNew", this, "onNew"), + connect.connect(store, "onDelete", this, "onDelete") + ]; + } + this.refresh(); + }, + + refresh: function(){ + // summary: + // Fetches the data and generates the list items. + if(!this.store){ return; } + this.store.fetch({ + query: this.query, + queryOptions: this.queryOptions, + onComplete: lang.hitch(this, "onComplete"), + onError: lang.hitch(this, "onError") + }); + }, + + createListItem: function(/*Object*/item){ + // summary: + // Creates a list item widget. + var attr = {}; + var arr = this.store.getLabelAttributes(item); + var labelAttr = arr ? arr[0] : null; + array.forEach(this.store.getAttributes(item), function(name){ + if(name === labelAttr){ + attr["label"] = this.store.getLabel(item); + }else{ + attr[name] = this.store.getValue(item, name); + } + }, this); + var w = new ListItem(attr); + item._widgetId = w.id; + return w; + }, + + generateList: function(/*Array*/items, /*Object*/dataObject){ + // summary: + // Given the data, generates a list of items. + array.forEach(this.getChildren(), function(child){ + child.destroyRecursive(); + }); + array.forEach(items, function(item, index){ + this.addChild(this.createListItem(item)); + }, this); + }, + + onComplete: function(/*Array*/items, /*Object*/request){ + // summary: + // An handler that is called after the fetch completes. + this.generateList(items, request); + }, + + onError: function(/*Object*/errorData, /*Object*/request){ + // summary: + // An error handler. + }, + + onSet: function(/*Object*/item, /*String*/attribute, /*Object|Array*/oldValue, /*Object|Array*/newValue){ + // summary: + // See dojo.data.api.Notification.onSet() + }, + + onNew: function(/*Object*/newItem, /*Object?*/parentInfo){ + // summary: + // See dojo.data.api.Notification.onNew() + this.addChild(this.createListItem(newItem)); + }, + + onDelete: function(/*Object*/deletedItem){ + // summary: + // See dojo.data.api.Notification.onDelete() + registry.byId(deletedItem._widgetId).destroyRecursive(); + } + }); +}); |
