📄 read.js
字号:
// when they dynamically update the query. Therefore, for maximum compatibility with dijit // widgets the recommended query parameter is a key/value object. That does not mean that the // the datastore may not take alternative query forms, such as a simple string, a Date, a number, // or a mix of such. Ultimately, The dojo.data.api.Read API is agnostic about what the query // format. // Further note: In general for query objects that accept strings as attribute // value matches, the store should also support basic filtering capability, such as * // (match any character) and ? (match single character). An example query that is a query object // would be like: { attrFoo: "value*"}. Which generally means match all items where they have // an attribute named attrFoo, with a value that starts with 'value'. // // The *queryOptions* parameter // The queryOptions parameter is an optional parameter used to specify optiosn that may modify // the query in some fashion, such as doing a case insensitive search, or doing a deep search // where all items in a hierarchical representation of data are scanned instead of just the root // items. It currently defines two options that all datastores should attempt to honor if possible: // { // ignoreCase: boolean, //Whether or not the query should match case sensitively or not. Default behaviour is false. // deep: boolean //Whether or not a fetch should do a deep search of items and all child // //items instead of just root-level items in a datastore. Default is false. // } // // The *onBegin* parameter. // function(size, request); // If an onBegin callback function is provided, the callback function // will be called just once, before the first onItem callback is called. // The onBegin callback function will be passed two arguments, the // the total number of items identified and the Request object. If the total number is // unknown, then size will be -1. Note that size is not necessarily the size of the // collection of items returned from the query, as the request may have specified to return only a // subset of the total set of items through the use of the start and count parameters. // // The *onItem* parameter. // function(item, request); // If an onItem callback function is provided, the callback function // will be called as each item in the result is received. The callback // function will be passed two arguments: the item itself, and the // Request object. // // The *onComplete* parameter. // function(items, request); // // If an onComplete callback function is provided, the callback function // will be called just once, after the last onItem callback is called. // Note that if the onItem callback is not present, then onComplete will be passed // an array containing all items which matched the query and the request object. // If the onItem callback is present, then onComplete is called as: // onComplete(null, request). // // The *onError* parameter. // function(errorData, request); // If an onError callback function is provided, the callback function // will be called if there is any sort of error while attempting to // execute the query. // The onError callback function will be passed two arguments: // an Error object and the Request object. // // The *scope* parameter. // If a scope object is provided, all of the callback functions (onItem, // onComplete, onError, etc) will be invoked in the context of the scope // object. In the body of the callback function, the value of the "this" // keyword will be the scope object. If no scope object is provided, // the callback functions will be called in the context of dojo.global(). // For example, onItem.call(scope, item, request) vs. // onItem.call(dojo.global(), item, request) // // The *start* parameter. // If a start parameter is specified, this is a indication to the datastore to // only start returning items once the start number of items have been located and // skipped. When this parameter is paired withh 'count', the store should be able // to page across queries with millions of hits by only returning subsets of the // hits for each query // // The *count* parameter. // If a count parameter is specified, this is a indication to the datastore to // only return up to that many items. This allows a fetch call that may have // millions of item matches to be paired down to something reasonable. // // The *sort* parameter. // If a sort parameter is specified, this is a indication to the datastore to // sort the items in some manner before returning the items. The array is an array of // javascript objects that must conform to the following format to be applied to the // fetching of items: // { // attribute: attribute || attribute-name-string, // descending: true|false; // Optional. Default is false. // } // Note that when comparing attributes, if an item contains no value for the attribute // (undefined), then it the default ascending sort logic should push it to the bottom // of the list. In the descending order case, it such items should appear at the top of the list. // // returns: // The fetch() method will return a javascript object conforming to the API // defined in dojo.data.api.Request. In general, it will be the keywordArgs // object returned with the required functions in Request.js attached. // Its general purpose is to provide a convenient way for a caller to abort an // ongoing fetch. // // The Request object may also have additional properties when it is returned // such as request.store property, which is a pointer to the datastore object that // fetch() is a method of. // // exceptions: // Throws an exception if the query is not valid, or if the query // is required but was not supplied. // // example: // Fetch all books identified by the query and call 'showBooks' when complete // | var request = store.fetch({query:"all books", onComplete: showBooks}); // example: // Fetch all items in the story and call 'showEverything' when complete. // | var request = store.fetch(onComplete: showEverything); // example: // Fetch only 10 books that match the query 'all books', starting at the fifth book found during the search. // This demonstrates how paging can be done for specific queries. // | var request = store.fetch({query:"all books", start: 4, count: 10, onComplete: showBooks}); // example: // Fetch all items that match the query, calling 'callback' each time an item is located. // | var request = store.fetch({query:"foo/bar", onItem:callback}); // example: // Fetch the first 100 books by author King, call showKing when up to 100 items have been located. // | var request = store.fetch({query:{author:"King"}, start: 0, count:100, onComplete: showKing}); // example: // Locate the books written by Author King, sort it on title and publisher, then return the first 100 items from the sorted items. // | var request = store.fetch({query:{author:"King"}, sort: [{ attribute: "title", descending: true}, {attribute: "publisher"}], ,start: 0, count:100, onComplete: 'showKing'}); // example: // Fetch the first 100 books by authors starting with the name King, then call showKing when up to 100 items have been located. // | var request = store.fetch({query:{author:"King*"}, start: 0, count:100, onComplete: showKing}); // example: // Fetch the first 100 books by authors ending with 'ing', but only have one character before it (King, Bing, Ling, Sing, etc.), then call showBooks when up to 100 items have been located. // | var request = store.fetch({query:{author:"?ing"}, start: 0, count:100, onComplete: showBooks}); // example: // Fetch the first 100 books by author King, where the name may appear as King, king, KING, kInG, and so on, then call showKing when up to 100 items have been located. // | var request = store.fetch({query:{author:"King"}, queryOptions:(ignoreCase: true}, start: 0, count:100, onComplete: showKing}); // example: // Paging // | var store = new dojo.data.LargeRdbmsStore({url:"jdbc:odbc:foobar"}); // | var fetchArgs = { // | query: {type:"employees", name:"Hillary *"}, // string matching // | sort: [{attribute:"department", descending:true}], // | start: 0, // | count: 20, // | scope: displayer, // | onBegin: showThrobber, // | onItem: displayItem, // | onComplete: stopThrobber, // | onError: handleFetchError, // | }; // | store.fetch(fetchArgs); // | ... // and then when the user presses the "Next Page" button... // | fetchArgs.start += 20; // | store.fetch(fetchArgs); // get the next 20 items var request = null; throw new Error('Unimplemented API: dojo.data.api.Read.fetch'); return request; // an object conforming to the dojo.data.api.Request API }, getFeatures: function(){ // summary: // The getFeatures() method returns an simple keyword values object // that specifies what interface features the datastore implements. // A simple CsvStore may be read-only, and the only feature it // implements will be the 'dojo.data.api.Read' interface, so the // getFeatures() method will return an object like this one: // {'dojo.data.api.Read': true}. // A more sophisticated datastore might implement a variety of // interface features, like 'dojo.data.api.Read', 'dojo.data.api.Write', // 'dojo.data.api.Identity', and 'dojo.data.api.Attribution'. return { 'dojo.data.api.Read': true }; }, close: function(/*dojo.data.api.Request || keywordArgs || null */ request){ // summary: // The close() method is intended for instructing the store to 'close' out // any information associated with a particular request. // // description: // The close() method is intended for instructing the store to 'close' out // any information associated with a particular request. In general, this API // expects to recieve as a parameter a request object returned from a fetch. // It will then close out anything associated with that request, such as // clearing any internal datastore caches and closing any 'open' connections. // For some store implementations, this call may be a no-op. // // request: // An instance of a request for the store to use to identify what to close out. // If no request is passed, then the store should clear all internal caches (if any) // and close out all 'open' connections. It does not render the store unusable from // there on, it merely cleans out any current data and resets the store to initial // state. // // example: // | var request = store.fetch({onComplete: doSomething}); // | ... // | store.close(request); throw new Error('Unimplemented API: dojo.data.api.Read.close'); }, getLabel: function(/* item */ item){ // summary: // Method to inspect the item and return a user-readable 'label' for the item // that provides a general/adequate description of what the item is. // // description: // Method to inspect the item and return a user-readable 'label' for the item // that provides a general/adequate description of what the item is. In general // most labels will be a specific attribute value or collection of the attribute // values that combine to label the item in some manner. For example for an item // that represents a person it may return the label as: "firstname lastlame" where // the firstname and lastname are attributes on the item. If the store is unable // to determine an adequate human readable label, it should return undefined. Users that wish // to customize how a store instance labels items should replace the getLabel() function on // their instance of the store, or extend the store and replace the function in // the extension class. // // item: // The item to return the label for. // // returns: // A user-readable string representing the item or undefined if no user-readable label can // be generated. throw new Error('Unimplemented API: dojo.data.api.Read.getLabel'); return undefined; }, getLabelAttributes: function(/* item */ item){ // summary: // Method to inspect the item and return an array of what attributes of the item were used // to generate its label, if any. // // description: // Method to inspect the item and return an array of what attributes of the item were used // to generate its label, if any. This function is to assist UI developers in knowing what // attributes can be ignored out of the attributes an item has when displaying it, in cases // where the UI is using the label as an overall identifer should they wish to hide // redundant information. // // item: // The item to return the list of label attributes for. // // returns: // An array of attribute names that were used to generate the label, or null if public attributes // were not used to generate the label. throw new Error('Unimplemented API: dojo.data.api.Read.getLabelAttributes'); return null; }});}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -