js/spreadsheet/codeInputsProcessor.js (67 lines of code) (raw):

/** * @file data table processor * @author sushuang(sushuang@baidu.com) */ define(function (require) { var $ = require('jquery'); var dtLib = require('dt/lib'); var helper = require('./helper'); var lang = require('./lang'); var constant = require('./constant'); /** * @public */ var processor = {}; /** * 此方法只可在jsDataFactory中使用。 * 此方法不做throttle,因为只用于监听ob。 * 约定在ob更新的上游进行throttle(即dataTableProcessor.fillJSData) * * @public * @param {Object} jsDataOb */ processor.fillFromJSData = function (jsDataOb) { var jsData = jsDataOb(); var mainListViewModels = jsDataOb.getCodeInputsListViewModels(); var jsDataType = jsDataOb.getType(); // Clear mainListViewModels.removeAll(); // Render var toAddArr = []; for (var seriesIndex = 0, lenS = jsData.length; seriesIndex < lenS; seriesIndex++) { var stringifyParam = jsDataOb.getCodeStringifyParam(); var codeText = stringifyParam.outputFormat === 'js' ? dtLib.stringifyJSObject(jsData[seriesIndex], stringifyParam) : jsonStringify(jsData[seriesIndex], stringifyParam); var codeTextOb = dtLib.ob(codeText); var colDesc = jsDataOb.getColDescBySeries(seriesIndex, jsDataType); var rangeDesc = (colDesc.single ? colDesc.start : (colDesc.start + ' - ' + colDesc.end)); var title = dtLib.strTemplate(lang.codeInputTitle, {rangeDesc: rangeDesc}); toAddArr.push({codeTextOb: codeTextOb, title: title}); codeTextOb.subscribe(onCodeTextChange, processor); } toAddArr.length && mainListViewModels.pushArray(toAddArr); function onCodeTextChange(nextCodeText, codeTextOb) { if (dtLib.checkValueInfoForConfirmed(codeTextOb)) { jsDataOb.fillJSDataByCodeInputs(); } } }; function jsonStringify(target, stringifyParam) { return JSON.stringify( // jshint ignore:line target, null, stringifyParam.compress ? 0 : stringifyParam.indentBase ); } /** * 此方法只可在jsDataFactory中使用。 * * @public * @param {Object} jsDataOb */ processor.fillJSData = function (jsDataOb) { var jsData = []; var vms = jsDataOb.getCodeInputsListViewModels()(); var colCount = jsDataOb.getColCount(); var jsDataType = jsDataOb.getType(); var seriesInfo = jsDataOb.getSeriesInfo(jsDataType, colCount); // 取数据 for (var seriesIndex = 0, lenS = vms.length; seriesIndex < lenS; seriesIndex++) { var oneCode = helper.parseToArray(vms[seriesIndex].codeTextOb(), true) || []; var oneSeries = []; for (var rowIndex = 0, lenR = oneCode.length; rowIndex < lenR; rowIndex++) { var oneCodeItem = oneCode[rowIndex]; var line; if (jsDataType === constant.JSDATA_DIM_ARRAY) { line = seriesInfo.seriesDim === 2 ? (!$.isArray(oneCodeItem) ? [] : oneCodeItem) : oneCodeItem; } else { // jsDataType === constant.JSDATA_DIM_ARRAY or constant.JSDATA_GEO line = $.isPlainObject(oneCodeItem) ? oneCodeItem : {}; } oneSeries.push(line); } jsData.push(oneSeries); } jsDataOb(jsData, dtLib.valueInfoForConfirmed(constant.UI_CODE_INPUTS)); }; return processor; });