webui-aria2/js/libs/dojox/mobile/_DataListMixin.js.uncompressed.js

135 lines
3.7 KiB
JavaScript
Raw Normal View History

//>>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();
}
});
});