source: Dev/trunk/src/client/dojox/mobile/_DataListMixin.js

Last change on this file was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 3.7 KB
Line 
1define([
2        "dojo/_base/array",
3        "dojo/_base/declare",
4        "dijit/registry",
5        "./_DataMixin",
6        "./ListItem",
7        "dojo/has",
8        "dojo/has!dojo-bidi?dojox/mobile/bidi/_StoreListMixin"
9], function(array, declare, registry, DataMixin, ListItem, has, BidiDataListMixin){
10
11        // module:
12        //              dojox/mobile/_DataListMixin
13
14        var _DataListMixin = declare(has("dojo-bidi") ? "dojox.mobile._NonBidiDataListMixin" : "dojox.mobile._DataListMixin", DataMixin, {
15                // summary:
16                //              Mixin for widgets to generate the list items corresponding to
17                //              the data provider object.
18                // description:
19                //              By mixing this class into the widgets, the list item nodes are
20                //              generated as the child nodes of the widget and automatically
21                //              regenerated whenever the corresponding data items are modified.
22
23                // append: Boolean
24                //              If true, refresh() does not clear the existing items.
25                append: false,
26
27                // itemMap: Object
28                //              An optional parameter mapping field names from the store to ItemList name.
29                // example:
30                //      |       itemMap:{text:'label', profile_image_url:'icon' }
31                itemMap: null,
32
33                // itemRenderer: ListItem class or subclass
34                //              The class used to create list items. Default is dojox/mobile/ListItem.
35                itemRenderer: ListItem,
36
37                buildRendering: function(){
38                        this.inherited(arguments);
39                        if(!this.store){ return; }
40                        var store = this.store;
41                        this.store = null;
42                        this.setStore(store, this.query, this.queryOptions);
43                },
44
45                createListItem: function(/*Object*/item){
46                        // summary:
47                        //              Creates a list item widget.
48                        var attr = {};
49                        var arr = this.store.getLabelAttributes(item);
50                        var labelAttr = arr ? arr[0] : null;
51                        array.forEach(this.store.getAttributes(item), function(name){
52                                if(name === labelAttr){
53                                        attr["label"] = this.store.getLabel(item);
54                                }else{
55                                        attr[(this.itemMap && this.itemMap[name]) || name] = this.store.getValue(item, name);
56                                }
57                        }, this);
58                        // TODO this code should be like for textDir in the bidi mixin createListItem method
59                        // however for that dynamic set/get of the dir property must be supported first
60                        // that is why for now as a workaround we keep the code here
61                        if(has("dojo-bidi") && typeof attr["dir"] == "undefined"){
62                                attr["dir"] = this.isLeftToRight() ? "ltr" : "rtl";
63                        }
64                        var w = new this.itemRenderer(attr);
65                        item._widgetId = w.id;
66                        return w;
67                },
68                generateList: function(/*Array*/items, /*Object*/dataObject){
69                        // summary:
70                        //              Given the data, generates a list of items.
71                        if(!this.append){
72                                array.forEach(this.getChildren(), function(child){
73                                        child.destroyRecursive();
74                                });
75                        }
76                        array.forEach(items, function(item, index){
77                                this.addChild(this.createListItem(item));
78                        }, this);
79                },
80
81                onComplete: function(/*Array*/items, /*Object*/request){
82                        // summary:
83                        //              An handler that is called after the fetch completes.
84                        this.generateList(items, request);
85                },
86
87                onError: function(/*Object*/errorData, /*Object*/request){
88                        // summary:
89                        //              An error handler.
90                },
91
92                onSet: function(/*Object*/item, /*String*/attribute, /*Object|Array*/oldValue, /*Object|Array*/newValue){
93                        // summary:
94                        //              See dojo/data/api/Notification.onSet().
95                },
96
97                onNew: function(/*Object*/newItem, /*Object?*/parentInfo){
98                        // summary:
99                        //              See dojo/data/api/Notification.onNew().
100                        this.addChild(this.createListItem(newItem));
101                },
102
103                onDelete: function(/*Object*/deletedItem){
104                        // summary:
105                        //              See dojo/data/api/Notification.onDelete().
106                        registry.byId(deletedItem._widgetId).destroyRecursive();
107                },
108
109                onStoreClose: function(/*Object?*/request){
110                        // summary:
111                        //              Refresh list on close.
112                        if(this.store.clearOnClose){
113                                this.refresh();
114                        }
115                }
116        });
117        return has("dojo-bidi") ? declare("dojox.mobile._DataListMixin", [_DataListMixin, BidiDataListMixin]) : _DataListMixin;
118});
Note: See TracBrowser for help on using the repository browser.