const DEFAULT = 2; const ONDEMAND = 4; const AUTO = 8; const FAST = 16; const PASSIVE = 32; /*** * DataObject DO * @param cname * @param serverJsonObj * @constructor */ var DataObject = function(cname, serverJsonObj){ this.ctlName = cname; this.jsonObj = serverJsonObj; this.getVal = function (key) { return jsonObj[key]; }; this.serVal = function (key, val) { jsonObj[key] = val; }; }; /*** * DataObjectList * @param name * @constructor */ var DataObjectList = function(name){ this.ctlName = name; this.list = null; this.isSorted = false; this.preSort = []; /*** * sorting * @param comparator (a,b) =====> a - b */ this.sortBy = function(comparator){ this.preSort = new Array(); for (let i = 0; i < this.list.length; i++) this.preSort.push(list[i]); quickSort(this.preSort, 0, this.preSort.length - 1, function(l, r){}); }; this.clearData = function () { this.isSorted = false; this.preSort = null; this.list = null; } this.len = function() { if(this.list == null) return 0; return this.list.length; }; this.mergeJsonData = function (data, extdata) { this.list = new Array(); for (let i = 0; i < data.length; i++) this.addObject(data[i]); }; this.addObject = function (jsonObj) { this.list.push(new DataObject(this.ctlName, jsonObj)); }; this.assignJsonData = function (data) { this.clearData(); this.mergeJsonData(data); }; this.getRaw = function (index) { if(this.list == null) return null; return this.list[index]; }; this.getSorted = function (index) { if(this.list == null) return null; if(!this.isSorted) return this.getRaw(index); return this.preSort[index]; }; this.quickSort = function (a,left,right,comp){ if(left>right){ //一定要有这个判断,因为有递归left和i-1,若没有这个判断条件,该函数会进入无限死错位递归 return; } var i=left, j=right, pivot=a[left]; //基准总是取序列开头的元素 while(i!=j){ while((comp(a[j],pivot) > 0)&&i 100){ obj.failedCount = 0; obj.stopTimers(); console.log("[排行榜返回为空git clone https://github.com/pentaho/mondrian-tck.git次数过多],暂停刷新"); } if(obj.failedCount == 2) { send_alert("排行榜多次返回没有数据,请尝试重新加载! [" + obj.appUrl +"]"); } }else{ obj.list.assignJsonData(output.list); } }; this.getList = function () { return this.list; }; this.passiveUpdate = function(data){ this.failedCount = 0; this.list.assignJsonData(data); }; this.init(); }; var SinglePage = function () { this.modules = []; }; var Module = function(chartContainerSelector, dataCtlName){ this.selector = chartContainerSelector; this.dataCtl = dataCtlName; this.activeData = null; this.lastActive = 0; this.tickInterval = 1000; /*** * bindData to UI * @param data DataObjectList */ this.setData = function (data) { if(data.ctlName == this.dataCtl){ console.log(`-------- Module ${this.selector} got data ----------- `); this.activeData = data; this.drawData(this.activeData); }else{ console.log(`-------- Module ${this.selector} cannot use data of ${data.ctlName} ----------- `); } }; this.init = function () { // do init this.setupInterval(); }; this.tick = function () { // do tick }; this.setupInterval = function () { // do tick if(this.tickInterval != 0) clearInterval(this.tickInterval); this.tickInterval = setInterval(this.tick, this.tickInterval); }; this.drawData = function () { // do drawData }; };