Changeset 8247

Show
Ignore:
Timestamp:
04/23/07 10:46:44 (21 months ago)
Author:
peller
Message:

Fixes #2769

Location:
dojo/trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • dojo/trunk/data/api/Read.js

    r7971 r8247  
    128128        }, 
    129129 
    130         loadItem: function(/* item */ item){ 
     130        loadItem: function(/* object */ keywordArgs){ 
    131131                //      summary: 
    132132                //              Given an item, this method loads the item so that a subsequent call 
    133133                //              to store.isItemLoaded(item) will return true.  If a call to 
    134134                //              to isItemLoaded() returns true before loadItem() is even called, 
    135                 //              then loadItem() need not do any work at all.  A call to loadItem() 
    136                 //              will block until the loadItem() implementation has loaded the item. 
    137                 if (this.isItemLoaded(item)) { 
    138                                 return item; 
    139                 } else { 
    140                                 dojo.unimplemented('dojo.data.api.Read.loadItem'); 
    141                                 return item; // item 
     135                //              then loadItem() need not do any work at all and will not even invoke 
     136                //              the callback handlers.  So, before invoking this method, check that 
     137                //              the item has not already been loaded..   
     138                //      keywordArgs: 
     139                //              An anonymous object that defines the item to load and callbacks to invoke when the  
     140                //              load has completed.  The format of the object is as follows: 
     141                //              { 
     142                //                      item: object, 
     143                //                      onItem: Function, 
     144                //                      onError: Function, 
     145                //                      scope: object 
     146                //              } 
     147                //      The *item* parameter. 
     148                //              The item parameter is an object that represents the item in question that should be 
     149                //              contained by the store.  This attribute is required. 
     150                 
     151                //      The *onItem* parameter. 
     152                //              Function(item) 
     153                //              The onItem parameter is the callback to invoke when the item has been loaded.  It takes only one 
     154                //              parameter, the fully loaded item. 
     155                // 
     156                //      The *onError* parameter. 
     157                //              Function(error) 
     158                //              The onError parameter is the callback to invoke when the item load encountered an error.  It takes only one 
     159                //              parameter, the error object 
     160                // 
     161                //      The *scope* parameter. 
     162                //              If a scope object is provided, all of the callback functions (onItem,  
     163                //              onItem, onError, etc) will be invoked in the context of the scope 
     164                //              object.  In the body of the callback function, the value of the "this" 
     165                //              keyword will be the scope object.   If no scope object is provided, 
     166                //              the callback functions will be called in the context of dojo.global(). 
     167                //              For example, onItem.call(scope, item, request) vs.  
     168                //              onItem.call(dojo.global(), item, request) 
     169                if (!this.isItemLoaded(keywordArgs.item)) { 
     170                        dojo.unimplemented('dojo.data.api.Read.loadItem'); 
    142171                } 
    143172        }, 
     
    232261                //              object.  In the body of the callback function, the value of the "this" 
    233262                //              keyword will be the scope object.   If no scope object is provided, 
    234                 //              the callback functions will be called in the context of dj_global 
     263                //              the callback functions will be called in the context of dojo.global() 
    235264                //              For example, onItem.call(scope, item, request) vs.  
    236                 //              onItem.call(dj_global, item, request) 
     265                //              onItem.call(dojo.global(), item, request) 
    237266                // 
    238267                //      The *start* parameter. 
  • dojo/trunk/data/JsonItemStore.js

    r8025 r8247  
    131131        }, 
    132132 
    133         loadItem: function(/* item */ item){ 
     133        loadItem: function(/* object */ keywordArgs){ 
    134134                //      summary:  
    135135                //              See dojo.data.api.Read.loadItem() 
    136                 this._assertIsItem(item); 
    137                 return item; //object 
     136                this._assertIsItem(keywordArgs.item); 
    138137        }, 
    139138 
     
    174173                                        } 
    175174                                } 
    176                                 findCallback(resultArgs, items); 
     175                                findCallback(items, resultArgs); 
    177176                        }else{ 
    178177                                // We want a copy to pass back in case the parent wishes to sort the array.  We shouldn't allow resort  
     
    181180                                        items = self._arrayOfAllItems.slice(0,self._arrayOfAllItems.length);  
    182181                                } 
    183                                 findCallback(resultArgs, items); 
     182                                findCallback(items, resultArgs); 
    184183                        } 
    185184                }; 
     
    196195                                getHandler.addCallback(function(data){ 
    197196                                        self._loadFinished = true; 
    198                                         self._arrayOfAllItems = self._getItemsFromLoadedData(data); 
    199                                         filter(keywordArgs, self._arrayOfAllItems); 
     197                                        try{ 
     198                                                self._arrayOfAllItems = self._getItemsFromLoadedData(data); 
     199                                                filter(keywordArgs, self._arrayOfAllItems); 
     200                                        }catch(e){ 
     201                                                errorCallback(e, keywordArgs); 
     202                                        } 
     203 
    200204                                }); 
    201205                                getHandler.addErrback(function(error){ 
    202                                         throw error; 
     206                                        errCallback(keywordArgs, error); 
    203207                                }); 
    204208                        }else if(this._jsonData){ 
    205                                 this._loadFinished = true; 
    206                                 this._arrayOfAllItems = this._getItemsFromLoadedData(this._jsonData); 
    207                                 this._jsonData = null; 
    208                                 filter(keywordArgs, this._arrayOfAllItems); 
     209                                try{ 
     210                                        this._loadFinished = true; 
     211                                        this._arrayOfAllItems = this._getItemsFromLoadedData(this._jsonData); 
     212                                        this._jsonData = null; 
     213                                        filter(keywordArgs, this._arrayOfAllItems); 
     214                                }catch(e){ 
     215                                        errorCallback(e, keywordArgs); 
     216                                } 
    209217                        }else{ 
    210                                 throw new Error("dojo.data.JsonItemStore: No JSON source data was provided as either URL or a nested Javascript object."); 
     218                                errorCallback(new Error("dojo.data.JsonItemStore: No JSON source data was provided as either URL or a nested Javascript object."), keywordArgs); 
    211219                        } 
    212220                } 
  • dojo/trunk/data/util/simpleFetch.js

    r7989 r8247  
    3535        var self = this; 
    3636 
    37         var _errorHandler = function(errorData){ 
    38                 if(request.onError){ 
    39                         var scope = request.scope || dojo.global; 
    40                         request.onError.call(scope, errorData); 
     37        var _errorHandler = function(errorData, requestObject){ 
     38                if(requestObject.onError){ 
     39                        var scope = requestObject.scope || dojo.global; 
     40                        requestObject.onError.call(scope, errorData, requestObject); 
    4141                } 
    4242        }; 
    4343 
    44         var _fetchHandler = function(requestObject, items){ 
     44        var _fetchHandler = function(items, requestObject){ 
    4545                var oldAbortFunction = requestObject.abort || null; 
    4646                var aborted = false; 
  • dojo/trunk/tests/data/JsonItemStore.js

    r8154 r8247  
    2828                         
    2929                        var d = new tests.Deferred(); 
    30             function completedAll(items){ 
     30            function completedAll(items, request){ 
    3131                                t.is(7, items.length); 
    3232                                d.callback(true); 
    3333                        } 
    34                         function error(errData){ 
    35                                 // t.assertTrue(false); 
     34                        function error(errData, request){ 
     35                                t.assertTrue(false); 
    3636                                d.errback(errData); 
    3737                        } 
     
    6666                        var d = new tests.Deferred(); 
    6767                        function onComplete(items, request){ 
    68                                 t.assertTrue((items.length === 1)); 
     68                                t.assertEqual(items.length, 1); 
    6969                                d.callback(true); 
    7070                        } 
    7171                        function onError(errData, request){ 
    7272                                t.assertTrue(false); 
    73                                 d.errback(false); 
     73                                d.errback(errData); 
    7474                        } 
    7575                        jsonItemStore.fetch({   query: {abbr: "ec"},  
     
    106106 
    107107                        function onBegin(size, requestObj){ 
    108                                 t.assertTrue(size === 7); 
     108                                t.assertEqual(size, 7); 
    109109                        } 
    110110                        function onItem(item, requestObj){ 
     
    113113                        } 
    114114                        function onComplete(items, request){ 
    115                                 t.assertTrue(count === 7); 
     115                                t.assertEqual(count, 7); 
    116116                                t.assertTrue(items === null); 
    117117                            d.callback(true); 
    118118                        } 
    119                         function onError(errData){ 
    120                                 t.assertTrue(false); 
    121                                 d.errback(false); 
     119                        function onError(errData, request){ 
     120                                t.assertTrue(false); 
     121                                d.errback(errData); 
    122122                        } 
    123123 
     
    155155                        var d = new tests.Deferred(); 
    156156                        function dumpFirstFetch(items, request){ 
    157                                 t.assertTrue(items.length === 5); 
     157                                t.assertEqual(items.length, 5); 
    158158                                request.start = 3; 
    159159                                request.count = 1; 
     
    163163 
    164164                        function dumpSecondFetch(items, request){ 
    165                                 t.assertTrue(items.length === 1); 
     165                                t.assertEqual(items.length, 1); 
    166166                                request.start = 0; 
    167167                                request.count = 5; 
     
    171171 
    172172                        function dumpThirdFetch(items, request){ 
    173                                 t.assertTrue(items.length === 5); 
     173                                t.assertEqual(items.length, 5); 
    174174                                request.start = 2; 
    175175                                request.count = 20; 
     
    179179 
    180180                        function dumpFourthFetch(items, request){ 
    181                                 t.assertTrue(items.length === 5); 
     181                                t.assertEqual(items.length, 5); 
    182182                request.start = 9; 
    183183                                request.count = 100; 
     
    187187 
    188188                        function dumpFifthFetch(items, request){ 
    189                                 t.assertTrue(items.length === 0); 
     189                                t.assertEqual(items.length, 0); 
    190190                                request.start = 2; 
    191191                                request.count = 20; 
     
    195195 
    196196                        function dumpSixthFetch(items, request){ 
    197                                 t.assertTrue(items.length === 5); 
     197                                t.assertEqual(items.length, 5); 
    198198                            d.callback(true); 
    199199                        } 
    200200 
    201201                        function completed(items, request){ 
    202                                 t.assertTrue(items.length === 7); 
     202                                t.assertEqual(items.length, 7); 
    203203                                request.start = 1; 
    204204                                request.count = 5; 
     
    207207                        } 
    208208 
    209                         function error(){ 
    210                                 t.assertTrue(false); 
    211                                 d.errback(false); 
     209                        function error(errData, request){ 
     210                                t.assertTrue(false); 
     211                                d.errback(errData); 
    212212                        } 
    213213                        jsonItemStore.fetch({onComplete: completed, onError: error}); 
     
    303303                        var names = jsonItemStore.getValues(item,"name"); 
    304304            t.assertTrue(dojo.isArray(names)); 
    305                         t.assertTrue(names.length === 1); 
    306                         t.assertTrue(names[0] === "El Salvador"); 
     305                        t.assertEqual(names.length, 1); 
     306                        t.assertEqual(names[0], "El Salvador"); 
    307307                }, 
    308308                function testReadAPI_getValues_byattributeItem(t){ 
     
    340340                        var attrValues = jsonItemStore.getValues(item,itemAttribute); 
    341341            t.assertTrue(dojo.isArray(attrValues)); 
    342                         t.assertTrue(attrValues.length === 1); 
    343                         t.assertTrue(attrValues[0] === "ec"); 
     342                        t.assertEqual(attrValues.length, 1); 
     343                        t.assertEqual(attrValues[0], "ec"); 
    344344                }, 
    345345                function testReadAPI_getItemByIdentity(t){ 
     
    373373                        if(item !== null){ 
    374374                                var name = jsonItemStore.getValue(item,"name"); 
    375                                 t.assertTrue(name === "El Salvador"); 
     375                                t.assertEqual(name, "El Salvador"); 
    376376                        } 
    377377                        item = jsonItemStore.getItemByIdentity("sv_not"); 
     
    474474                        if(itemAttribute !== null){ 
    475475                                var name = jsonItemStore.getValue(itemAttribute,"name"); 
    476                                 t.assertTrue(name === "abbr"); 
     476                                t.assertEqual(name, "abbr"); 
    477477                        } 
    478478                        var item = jsonItemStore.getItemByIdentity("Ecuador"); 
    479479                        t.assertTrue(jsonItemStore.hasAttribute(item,itemAttribute)); 
    480480                        var attrValue = jsonItemStore.getValue(item,itemAttribute); 
    481                         t.assertTrue(attrValue === "ec"); 
     481                        t.assertEqual(attrValue, "ec"); 
    482482                }, 
    483483                function testReadAPI_containsValue(t){ 
     
    581581 
    582582                        var attributes = jsonItemStore.getAttributes(item); 
    583                         t.assertTrue(attributes.length === 3); 
     583                        t.assertEqual(attributes.length, 3); 
    584584                        for(var i = 0; i < attributes.length; i++){ 
    585585                                t.assertTrue((attributes[i] === "name" || attributes[i] === "abbr" || attributes[i] === "capital")); 
     
    615615                                count++; 
    616616                        } 
    617                         t.assertTrue(count === 2); 
     617                        t.assertEqual(count, 2); 
    618618                }, 
    619619                function testReadAPI_fetch_patternMatch0(t){ 
     
    642642                        var d = new tests.Deferred(); 
    643643                        function completed(items, request) { 
    644                                 t.assertTrue(items.length === 5); 
     644                                t.assertEqual(items.length, 5); 
    645645                                var passed = true; 
    646646                                for(var i = 0; i < items.length; i++){ 
     
    655655                                        d.callback(true); 
    656656                                }else{ 
    657                                         d.errback(false); 
    658                                 } 
    659                         } 
    660                         function error() { 
    661                                 t.assertTrue(false); 
    662                                 d.errback(false); 
     657                                        d.errback(new Error("Unexpected abbreviation found, match failure.")); 
     658                                } 
     659                        } 
     660                        function error(error, request) { 
     661                                t.assertTrue(false); 
     662                                d.errback(error); 
    663663                        } 
    664664                        jsonItemStore.fetch({query: {abbr: "e*"}, onComplete: completed, onError: error}); 
     
    687687                        var d = new tests.Deferred(); 
    688688                        function completed(items, request){ 
    689                                 t.assertTrue(items.length === 2); 
     689                                t.assertEqual(items.length, 2); 
    690690                                var passed = true; 
    691691                                for(var i = 0; i < items.length; i++){ 
     
    700700                                        d.callback(true); 
    701701                                }else{ 
    702                                         d.errback(false); 
    703                                 } 
    704                         } 
    705                         function error(){ 
    706                                 t.assertTrue(false); 
    707                                 d.errback(false); 
     702                                        d.errback(new Error("Unexpected pattern matched.  Filter failure.")); 
     703                                } 
     704                        } 
     705                        function error(error, request){ 
     706                                t.assertTrue(false); 
     707                                d.errback(error); 
    708708                        } 
    709709                        jsonItemStore.fetch({query: {value: "*$*"}, onComplete: completed, onError: error}); 
     
    732732                        var d = new tests.Deferred(); 
    733733                        function completed(items, request){ 
    734                                 t.assertTrue(items.length === 1); 
     734                                t.assertEqual(items.length, 1); 
    735735                                var passed = true; 
    736736                                for(var i = 0; i < items.length; i++){ 
     
    745745                                        d.callback(true); 
    746746                                }else{ 
    747                                         d.errback(false); 
    748                                 } 
    749                         } 
    750                         function error(){ 
    751                                 t.assertTrue(false); 
    752                                 d.callback(false); 
     747                                        d.errback(new Error("Unexpected abbreviation found, match failure.")); 
     748                                } 
     749                        } 
     750                        function error(error, request){ 
     751                                t.assertTrue(false); 
     752                                d.errback(error); 
    753753                        } 
    754754                        jsonItemStore.fetch({query: {value: "bar\*foo"}, onComplete: completed, onError: error}); 
     
    779779                        var d = new tests.Deferred(); 
    780780                        function completed(items, request){ 
    781                                 t.assertTrue(items.length === 11); 
     781                                t.assertEqual(items.length, 11); 
    782782                                var passed = true; 
    783783                                for(var i = 0; i < items.length; i++){ 
     
    792792                                        d.callback(true); 
    793793                                }else{ 
    794                                         d.errback(false); 
    795                                 } 
    796                         } 
    797  
    798                         function error(){ 
    799                                 t.assertTrue(false); 
    800                                 d.errback(false); 
     794                                        d.errback(new Error("Unexpected sorting order found, sort failure.")); 
     795                                } 
     796                        } 
     797 
     798                        function error(error, request){ 
     799                                t.assertTrue(false); 
     800                                d.errback(error); 
    801801                        } 
    802802 
     
    828828                        var d = new tests.Deferred(); 
    829829                        function completed(items, request){ 
    830                                 t.assertTrue(items.length === 11); 
     830                                t.assertEqual(items.length, 11); 
    831831                                var passed = true; 
    832832                                for(var i = 0; i < items.length; i++){ 
     
    841841                                        d.callback(true); 
    842842                                }else{ 
    843                                         d.errback(false); 
    844                                 } 
    845                         } 
    846  
    847                         function error(){ 
    848                                 t.assertTrue(false); 
    849                                 d.errback(false); 
     843                                        d.errback(new Error("Unexpected sorting order found, sort failure.")); 
     844                                } 
     845                        } 
     846 
     847                        function error(error, request){ 
     848                                t.assertTrue(false); 
     849                                d.errback(error); 
    850850                        } 
    851851 
     
    878878                        var d = new tests.Deferred(); 
    879879                        function completed(items, request){ 
    880                                 t.assertTrue(items.length === 5); 
     880                                t.assertEqual(items.length, 5); 
    881881                                var itemId = 10; 
    882882                                var passed = true; 
     
    893893                                        d.callback(true); 
    894894                                }else{ 
    895                                         d.errback(false); 
    896                                 } 
    897                         } 
    898                  
    899                         function error(){ 
    900                                 t.assertTrue(false); 
    901                                 d.errback(false); 
     895