⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datasource.js

📁 这是YUI的源码及相关示例。里面有很多很炫的Javascript效果。
💻 JS
📖 第 1 页 / 共 5 页
字号:
            return oParsedResponse;        }    }    return null;            },/** * Overridable method parses XML data for one result into an object literal. * * @method parseXMLResult * @param result {XML} XML for one result. * @return {Object} Object literal of data for one result. */parseXMLResult : function(result) {    var oResult = {},        schema = this.responseSchema;            try {        // Loop through each data field in each result using the schema        for(var m = schema.fields.length-1; m >= 0 ; m--) {            var field = schema.fields[m];            var key = (lang.isValue(field.key)) ? field.key : field;            var data = null;            // Values may be held in an attribute...            var xmlAttr = result.attributes.getNamedItem(key);            if(xmlAttr) {                data = xmlAttr.value;            }            // ...or in a node            else {                var xmlNode = result.getElementsByTagName(key);                if(xmlNode && xmlNode.item(0) && xmlNode.item(0)) {                    data = xmlNode.item(0).firstChild.nodeValue;                    var item = xmlNode.item(0);                    // For IE, then DOM...                    data = (item.text) ? item.text : (item.textContent) ? item.textContent : null;                    // ...then fallback, but check for multiple child nodes                    if(!data) {                        var datapieces = [];                        for(var j=0, len=item.childNodes.length; j<len; j++) {                            if(item.childNodes[j].nodeValue) {                                datapieces[datapieces.length] = item.childNodes[j].nodeValue;                            }                        }                        if(datapieces.length > 0) {                            data = datapieces.join("");                        }                    }                }            }            // Safety net            if(data === null) {                   data = "";            }            // Backward compatibility            if(!field.parser && field.converter) {                field.parser = field.converter;            }            var parser = (typeof field.parser === 'function') ?                field.parser :                DS.Parser[field.parser+''];            if(parser) {                data = parser.call(this, data);            }            // Safety measure            if(data === undefined) {                data = null;            }            oResult[key] = data;        }    }    catch(e) {    }    return oResult;},/** * Overridable method parses XML data into a response object. * * @method parseXMLData * @param oRequest {Object} Request object. * @param oFullResponse {Object} The full XML response from the live database. * @return {Object} Parsed response object with the following properties<br> *     - results (Array) Array of parsed data results<br> *     - error (Boolean) True if there was an error */parseXMLData : function(oRequest, oFullResponse) {    var bError = false,        schema = this.responseSchema,        oParsedResponse = {meta:{}},        xmlList = null,        metaNode      = schema.metaNode,        metaLocators  = schema.metaFields || {},        i,k,loc,v;    // In case oFullResponse is something funky    try {        xmlList = (schema.resultNode) ?            oFullResponse.getElementsByTagName(schema.resultNode) :            null;        // Pull any meta identified        metaNode = metaNode ? oFullResponse.getElementsByTagName(metaNode)[0] :                   oFullResponse;        if (metaNode) {            for (k in metaLocators) {                if (lang.hasOwnProperty(metaLocators, k)) {                    loc = metaLocators[k];                    // Look for a node                    v = metaNode.getElementsByTagName(loc)[0];                    if (v) {                        v = v.firstChild.nodeValue;                    } else {                        // Look for an attribute                        v = metaNode.attributes.getNamedItem(loc);                        if (v) {                            v = v.value;                        }                    }                    if (lang.isValue(v)) {                        oParsedResponse.meta[k] = v;                    }                }                            }        }    }    catch(e) {    }    if(!xmlList || !lang.isArray(schema.fields)) {        bError = true;    }    // Loop through each result    else {        oParsedResponse.results = [];        for(i = xmlList.length-1; i >= 0 ; --i) {            var oResult = this.parseXMLResult(xmlList.item(i));            // Capture each array of values into an array of results            oParsedResponse.results[i] = oResult;        }    }    if(bError) {        oParsedResponse.error = true;    }    else {    }    return oParsedResponse;},/** * Overridable method parses JSON data into a response object. * * @method parseJSONData * @param oRequest {Object} Request object. * @param oFullResponse {Object} The full JSON from the live database. * @return {Object} Parsed response object with the following properties<br> *     - results (Array) Array of parsed data results<br> *     - error (Boolean) True if there was an error */parseJSONData : function(oRequest, oFullResponse) {    var oParsedResponse = {results:[],meta:{}};        if(lang.isObject(oFullResponse) && this.responseSchema.resultsList) {        var schema = this.responseSchema,            fields          = schema.fields,            resultsList     = oFullResponse,            results         = [],            metaFields      = schema.metaFields || {},            fieldParsers    = [],            fieldPaths      = [],            simpleFields    = [],            bError          = false,            i,len,j,v,key,parser,path;        // Function to convert the schema's fields into walk paths        var buildPath = function (needle) {            var path = null, keys = [], i = 0;            if (needle) {                // Strip the ["string keys"] and [1] array indexes                needle = needle.                    replace(/\[(['"])(.*?)\1\]/g,                    function (x,$1,$2) {keys[i]=$2;return '.@'+(i++);}).                    replace(/\[(\d+)\]/g,                    function (x,$1) {keys[i]=parseInt($1,10)|0;return '.@'+(i++);}).                    replace(/^\./,''); // remove leading dot                // If the cleaned needle contains invalid characters, the                // path is invalid                if (!/[^\w\.\$@]/.test(needle)) {                    path = needle.split('.');                    for (i=path.length-1; i >= 0; --i) {                        if (path[i].charAt(0) === '@') {                            path[i] = keys[parseInt(path[i].substr(1),10)];                        }                    }                }                else {                }            }            return path;        };        // Function to walk a path and return the pot of gold        var walkPath = function (path, origin) {            var v=origin,i=0,len=path.length;            for (;i<len && v;++i) {                v = v[path[i]];            }            return v;        };        // Parse the response        // Step 1. Pull the resultsList from oFullResponse (default assumes        // oFullResponse IS the resultsList)        path = buildPath(schema.resultsList);        if (path) {            resultsList = walkPath(path, oFullResponse);            if (resultsList === undefined) {                bError = true;            }        } else {            bError = true;        }                if (!resultsList) {            resultsList = [];        }        if (!lang.isArray(resultsList)) {            resultsList = [resultsList];        }        if (!bError) {            // Step 2. Parse out field data if identified            if(schema.fields) {                var field;                // Build the field parser map and location paths                for (i=0, len=fields.length; i<len; i++) {                    field = fields[i];                    key    = field.key || field;                    parser = ((typeof field.parser === 'function') ?                        field.parser :                        DS.Parser[field.parser+'']) || field.converter;                    path   = buildPath(key);                        if (parser) {                        fieldParsers[fieldParsers.length] = {key:key,parser:parser};                    }                        if (path) {                        if (path.length > 1) {                            fieldPaths[fieldPaths.length] = {key:key,path:path};                        } else {                            simpleFields[simpleFields.length] = {key:key,path:path[0]};                        }                    } else {                    }                }                // Process the results, flattening the records and/or applying parsers if needed                //if (fieldParsers.length || fieldPaths.length) {                    for (i = resultsList.length - 1; i >= 0; --i) {                        var r = resultsList[i], rec = {};                        for (j = simpleFields.length - 1; j >= 0; --j) {                            // Bug 1777850: data might be held in an array                            rec[simpleFields[j].key] =                                    (r[simpleFields[j].path] !== undefined) ?                                    r[simpleFields[j].path] : r[j];                        }                        for (j = fieldPaths.length - 1; j >= 0; --j) {                            rec[fieldPaths[j].key] = walkPath(fieldPaths[j].path,r);                        }                        for (j = fieldParsers.length - 1; j >= 0; --j) {                            var p = fieldParsers[j].key;                            rec[p] = fieldParsers[j].parser(rec[p]);                            if (rec[p] === undefined) {                                rec[p] = null;                            }                        }                        results[i] = rec;                    }                //}            }            else {                results = resultsList;            }            for (key in metaFields) {                if (lang.hasOwnProperty(metaFields,key)) {                    path = buildPath(metaFields[key]);                    if (path) {                        v = walkPath(path, oFullResponse);                        oParsedResponse.meta[key] = v;                    }                }            }        } else {            oParsedResponse.error = true;        }        oParsedResponse.results = results;    }    else {        oParsedResponse.error = true;    }    return oParsedResponse;},/** * Overridable method parses an HTML TABLE element reference into a response object. * Data is parsed out of TR elements from all TBODY elements.  * * @method parseHTMLTableData * @param oRequest {Object} Request object. * @param oFullResponse {Object} The full HTML element reference from the live database. * @return {Object} Parsed response object with the following properties<br> *     - results (Array) Array of parsed data results<br> *     - error (Boolean) True if there was an error */parseHTMLTableData : function(oRequest, oFullResponse) {    var bError = false;    var elTable = oFullResponse;    var fields = this.responseSchema.fields;    var oParsedResponse = {results:[]};    // Iterate through each TBODY    for(var i=0; i<elTable.tBodies.length; i++) {        var elTbody = elTable.tBodies[i];        // Iterate through each TR        for(var j=elTbody.rows.length-1; j>-1; j--) {            var elRow = elTbody.rows[j];            var oResult = {};                        for(var k=fields.length-1; k>-1; k--) {                var field = fields[k];                var key = (lang.isValue(field.key)) ? field.key : field;                var data = elRow.cells[k].innerHTML;                // Backward compatibility                if(!field.parser && field.converter) {                    field.parser = field.converter;                }                var parser = (typeof field.parser === 'function') ?                    field.parser :                    DS.Parser[field.parser+''];                if(parser) {                    data = parser.call(this, data);                }                // Safety measure                if(data === undefined) {                    data = null;                }                oResult[key] = data;            }            oParsedResponse.results[j] = oResult;        }    }    if(bError) {        oParsedResponse.error = true;    }    else {    }    return oParsedResponse;}};// DataSourceBase uses EventProviderlang.augmentProto(DS, util.EventProvider);/****************************************************************************//****************************************************************************//****************************************************************************//** * LocalDataSource class for in-memory data structs including JavaScript arrays, * JavaScript object literals (JSON), XML documents, and HTML tables. * * @namespace YAHOO.util * @class YAHOO.util.LocalDataSource * @extends YAHOO.util.DataSourceBase  * @constructor * @param oLiveData {HTMLElement}  Pointer to live data. * @param oConfigs {object} (optional) Object literal of configuration values. */util.LocalDataSource = function(oLiveData, oConfigs) {    this.dataType = DS.TYPE_LOCAL;        if(oLiveData) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -