From 55a14bfbe7516d44dae6c6b1b546649c80e5ec44 Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 1 Aug 2017 15:05:15 +0800 Subject: [PATCH 1/3] add --- bi/base.js | 74 ++++++++++++++++++- bi/core.js | 25 +++++-- bi/widget.js | 5 ++ docs/base.js | 74 ++++++++++++++++++- docs/core.js | 25 +++++-- docs/widget.js | 5 ++ src/base/table/table.grid.js | 35 +++++++++ src/base/table/table.grid.quick.js | 39 +++++++++- src/core/base.js | 18 +++-- src/core/widget.js | 7 ++ .../adaptivearrangement.js | 5 ++ 11 files changed, 294 insertions(+), 18 deletions(-) diff --git a/bi/base.js b/bi/base.js index a2540ebd6..9e9bbe813 100644 --- a/bi/base.js +++ b/bi/base.js @@ -30103,6 +30103,41 @@ BI.GridTable = BI.inherit(BI.Widget, { this.contextLayout.attr("items", items); this.contextLayout.resize(); + this.topLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.topRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + + function overscan(grid, w, h, rSize, cSize) { + var rCount = h / rSize; + var cCount = w / cSize; + if (cCount * (120 / rSize) >= 60 || rCount * (120 / cSize) >= 60) { + grid.attr("overscanRowCount", 100); + grid.attr("overscanColumnCount", 100); + } + } + + if (freezeColLength > 0) { + overscan(this.topLeftGrid, tlw, tlh, o.headerRowSize, totalLeftColumnSize / freezeColLength); + overscan(this.bottomLeftGrid, blw, blh, o.rowSize, totalLeftColumnSize / freezeColLength); + } + if (o.columnSize.length - freezeColLength > 0) { + overscan(this.topRight, trw, trh, o.headerRowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + overscan(this.bottomRightGrid, brw, brh, o.rowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + } + this.topLeftGrid._populate(this.header[0]); this.topRightGrid._populate(this.header[1]); this.bottomLeftGrid._populate(this.items[0]); @@ -30329,7 +30364,8 @@ BI.QuickGridTable = BI.inherit(BI.GridTable, { _populateTable: function () { var self = this, o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = []; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = []; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { @@ -30420,6 +30456,42 @@ BI.QuickGridTable = BI.inherit(BI.GridTable, { } }); }); + + this.topLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.topRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + + function overscan(grid, w, h, rSize, cSize) { + var rCount = h / rSize; + var cCount = w / cSize; + if (cCount * (120 / rSize) >= 60 || rCount * (120 / cSize) >= 60) { + grid.attr("overscanRowCount", 100); + grid.attr("overscanColumnCount", 100); + } + } + + if (freezeColLength > 0) { + overscan(this.topLeftGrid, otlw, otlh, o.headerRowSize, totalLeftColumnSize / freezeColLength); + overscan(this.bottomLeftGrid, oblw, oblh, o.rowSize, totalLeftColumnSize / freezeColLength); + } + if (o.columnSize.length - freezeColLength > 0) { + overscan(this.topRight, otrw, otrh, o.headerRowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + overscan(this.bottomRightGrid, obrw, obrh, o.rowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + } + this.topLeftGrid.populate(leftHeader); this.topRightGrid.populate(rightHeader); this.bottomLeftGrid.populate(leftItems); diff --git a/bi/core.js b/bi/core.js index e1be123e0..e4b54a49a 100644 --- a/bi/core.js +++ b/bi/core.js @@ -2940,10 +2940,7 @@ if (!window.BI) { return /(msie|trident)/i.test(navigator.userAgent.toLowerCase()); }, - isIE9Below: function () { - if (!BI.isIE()) { - return false; - } + getIEVersion: function () { var version = 0; var agent = navigator.userAgent.toLowerCase(); var v1 = agent.match(/(?:msie\s([\w.]+))/); @@ -2957,7 +2954,18 @@ if (!window.BI) { } else { version = 0; } - return version < 9; + return version; + }, + + isIE9Below: function () { + if (!BI.isIE()) { + return false; + } + return this.getIEVersion() < 9; + }, + + isIE9: function () { + return this.getIEVersion() === 9; }, isEdge: function () { @@ -4672,6 +4680,13 @@ BI.Widget = BI.inherit(BI.OB, { }, attr: function (key, value) { + var self = this; + if (BI.isPlainObject(key)) { + BI.each(key, function (k, v) { + self.attr(k, v); + }) + return; + } if (BI.isNotNull(value)) { return this.options[key] = value; } diff --git a/bi/widget.js b/bi/widget.js index 95a2afefa..c0cbf8170 100644 --- a/bi/widget.js +++ b/bi/widget.js @@ -629,7 +629,12 @@ BI.AdaptiveArrangement = BI.inherit(BI.Widget, { clearInterval(self._scrollInterval); self._scrollInterval = null; } + var count = 0; self._scrollInterval = setInterval(function () { + count++; + if (count <= 3) { + return; + } var offset = self._getScrollOffset(); var t = offset.top + map[direction][0] * 40; var l = offset.left + map[direction][1] * 40; diff --git a/docs/base.js b/docs/base.js index a2540ebd6..9e9bbe813 100644 --- a/docs/base.js +++ b/docs/base.js @@ -30103,6 +30103,41 @@ BI.GridTable = BI.inherit(BI.Widget, { this.contextLayout.attr("items", items); this.contextLayout.resize(); + this.topLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.topRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + + function overscan(grid, w, h, rSize, cSize) { + var rCount = h / rSize; + var cCount = w / cSize; + if (cCount * (120 / rSize) >= 60 || rCount * (120 / cSize) >= 60) { + grid.attr("overscanRowCount", 100); + grid.attr("overscanColumnCount", 100); + } + } + + if (freezeColLength > 0) { + overscan(this.topLeftGrid, tlw, tlh, o.headerRowSize, totalLeftColumnSize / freezeColLength); + overscan(this.bottomLeftGrid, blw, blh, o.rowSize, totalLeftColumnSize / freezeColLength); + } + if (o.columnSize.length - freezeColLength > 0) { + overscan(this.topRight, trw, trh, o.headerRowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + overscan(this.bottomRightGrid, brw, brh, o.rowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + } + this.topLeftGrid._populate(this.header[0]); this.topRightGrid._populate(this.header[1]); this.bottomLeftGrid._populate(this.items[0]); @@ -30329,7 +30364,8 @@ BI.QuickGridTable = BI.inherit(BI.GridTable, { _populateTable: function () { var self = this, o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = []; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = []; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { @@ -30420,6 +30456,42 @@ BI.QuickGridTable = BI.inherit(BI.GridTable, { } }); }); + + this.topLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.topRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + + function overscan(grid, w, h, rSize, cSize) { + var rCount = h / rSize; + var cCount = w / cSize; + if (cCount * (120 / rSize) >= 60 || rCount * (120 / cSize) >= 60) { + grid.attr("overscanRowCount", 100); + grid.attr("overscanColumnCount", 100); + } + } + + if (freezeColLength > 0) { + overscan(this.topLeftGrid, otlw, otlh, o.headerRowSize, totalLeftColumnSize / freezeColLength); + overscan(this.bottomLeftGrid, oblw, oblh, o.rowSize, totalLeftColumnSize / freezeColLength); + } + if (o.columnSize.length - freezeColLength > 0) { + overscan(this.topRight, otrw, otrh, o.headerRowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + overscan(this.bottomRightGrid, obrw, obrh, o.rowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + } + this.topLeftGrid.populate(leftHeader); this.topRightGrid.populate(rightHeader); this.bottomLeftGrid.populate(leftItems); diff --git a/docs/core.js b/docs/core.js index 21e835a88..6fe5dd752 100644 --- a/docs/core.js +++ b/docs/core.js @@ -14082,10 +14082,7 @@ if (!window.BI) { return /(msie|trident)/i.test(navigator.userAgent.toLowerCase()); }, - isIE9Below: function () { - if (!BI.isIE()) { - return false; - } + getIEVersion: function () { var version = 0; var agent = navigator.userAgent.toLowerCase(); var v1 = agent.match(/(?:msie\s([\w.]+))/); @@ -14099,7 +14096,18 @@ if (!window.BI) { } else { version = 0; } - return version < 9; + return version; + }, + + isIE9Below: function () { + if (!BI.isIE()) { + return false; + } + return this.getIEVersion() < 9; + }, + + isIE9: function () { + return this.getIEVersion() === 9; }, isEdge: function () { @@ -14668,6 +14676,13 @@ BI.Widget = BI.inherit(BI.OB, { }, attr: function (key, value) { + var self = this; + if (BI.isPlainObject(key)) { + BI.each(key, function (k, v) { + self.attr(k, v); + }) + return; + } if (BI.isNotNull(value)) { return this.options[key] = value; } diff --git a/docs/widget.js b/docs/widget.js index 95a2afefa..c0cbf8170 100644 --- a/docs/widget.js +++ b/docs/widget.js @@ -629,7 +629,12 @@ BI.AdaptiveArrangement = BI.inherit(BI.Widget, { clearInterval(self._scrollInterval); self._scrollInterval = null; } + var count = 0; self._scrollInterval = setInterval(function () { + count++; + if (count <= 3) { + return; + } var offset = self._getScrollOffset(); var t = offset.top + map[direction][0] * 40; var l = offset.left + map[direction][1] * 40; diff --git a/src/base/table/table.grid.js b/src/base/table/table.grid.js index 1eae8487b..c18baa2ef 100644 --- a/src/base/table/table.grid.js +++ b/src/base/table/table.grid.js @@ -362,6 +362,41 @@ BI.GridTable = BI.inherit(BI.Widget, { this.contextLayout.attr("items", items); this.contextLayout.resize(); + this.topLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.topRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + + function overscan(grid, w, h, rSize, cSize) { + var rCount = h / rSize; + var cCount = w / cSize; + if (cCount * (120 / rSize) >= 60 || rCount * (120 / cSize) >= 60) { + grid.attr("overscanRowCount", 100); + grid.attr("overscanColumnCount", 100); + } + } + + if (freezeColLength > 0) { + overscan(this.topLeftGrid, tlw, tlh, o.headerRowSize, totalLeftColumnSize / freezeColLength); + overscan(this.bottomLeftGrid, blw, blh, o.rowSize, totalLeftColumnSize / freezeColLength); + } + if (o.columnSize.length - freezeColLength > 0) { + overscan(this.topRight, trw, trh, o.headerRowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + overscan(this.bottomRightGrid, brw, brh, o.rowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + } + this.topLeftGrid._populate(this.header[0]); this.topRightGrid._populate(this.header[1]); this.bottomLeftGrid._populate(this.items[0]); diff --git a/src/base/table/table.grid.quick.js b/src/base/table/table.grid.quick.js index 878f1bcd2..c5c98a337 100644 --- a/src/base/table/table.grid.quick.js +++ b/src/base/table/table.grid.quick.js @@ -116,7 +116,8 @@ BI.QuickGridTable = BI.inherit(BI.GridTable, { _populateTable: function () { var self = this, o = this.options; - var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, summaryColumnSizeArray = []; + var regionSize = this.getRegionSize(), totalLeftColumnSize = 0, totalRightColumnSize = 0, totalColumnSize = 0, + summaryColumnSizeArray = []; var freezeColLength = this._getFreezeColLength(); BI.each(o.columnSize, function (i, size) { if (o.isNeedFreeze === true && o.freezeCols.contains(i)) { @@ -207,6 +208,42 @@ BI.QuickGridTable = BI.inherit(BI.GridTable, { } }); }); + + this.topLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.topRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomLeftGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + this.bottomRightGrid.attr({ + overscanColumnCount: 0, + overscanRowCount: 0 + }); + + function overscan(grid, w, h, rSize, cSize) { + var rCount = h / rSize; + var cCount = w / cSize; + if (cCount * (120 / rSize) >= 60 || rCount * (120 / cSize) >= 60) { + grid.attr("overscanRowCount", 100); + grid.attr("overscanColumnCount", 100); + } + } + + if (freezeColLength > 0) { + overscan(this.topLeftGrid, otlw, otlh, o.headerRowSize, totalLeftColumnSize / freezeColLength); + overscan(this.bottomLeftGrid, oblw, oblh, o.rowSize, totalLeftColumnSize / freezeColLength); + } + if (o.columnSize.length - freezeColLength > 0) { + overscan(this.topRight, otrw, otrh, o.headerRowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + overscan(this.bottomRightGrid, obrw, obrh, o.rowSize, totalRightColumnSize / (o.columnSize.length - freezeColLength)); + } + this.topLeftGrid.populate(leftHeader); this.topRightGrid.populate(rightHeader); this.bottomLeftGrid.populate(leftItems); diff --git a/src/core/base.js b/src/core/base.js index 35ddfdead..9071f40ba 100644 --- a/src/core/base.js +++ b/src/core/base.js @@ -1048,10 +1048,7 @@ if (!window.BI) { return /(msie|trident)/i.test(navigator.userAgent.toLowerCase()); }, - isIE9Below: function () { - if (!BI.isIE()) { - return false; - } + getIEVersion: function () { var version = 0; var agent = navigator.userAgent.toLowerCase(); var v1 = agent.match(/(?:msie\s([\w.]+))/); @@ -1065,7 +1062,18 @@ if (!window.BI) { } else { version = 0; } - return version < 9; + return version; + }, + + isIE9Below: function () { + if (!BI.isIE()) { + return false; + } + return this.getIEVersion() < 9; + }, + + isIE9: function () { + return this.getIEVersion() === 9; }, isEdge: function () { diff --git a/src/core/widget.js b/src/core/widget.js index 62775547e..a7536dcf5 100644 --- a/src/core/widget.js +++ b/src/core/widget.js @@ -343,6 +343,13 @@ BI.Widget = BI.inherit(BI.OB, { }, attr: function (key, value) { + var self = this; + if (BI.isPlainObject(key)) { + BI.each(key, function (k, v) { + self.attr(k, v); + }) + return; + } if (BI.isNotNull(value)) { return this.options[key] = value; } diff --git a/src/widget/adaptivearrangement/adaptivearrangement.js b/src/widget/adaptivearrangement/adaptivearrangement.js index 0891d19a9..ee4d56348 100644 --- a/src/widget/adaptivearrangement/adaptivearrangement.js +++ b/src/widget/adaptivearrangement/adaptivearrangement.js @@ -210,7 +210,12 @@ BI.AdaptiveArrangement = BI.inherit(BI.Widget, { clearInterval(self._scrollInterval); self._scrollInterval = null; } + var count = 0; self._scrollInterval = setInterval(function () { + count++; + if (count <= 3) { + return; + } var offset = self._getScrollOffset(); var t = offset.top + map[direction][0] * 40; var l = offset.left + map[direction][1] * 40; From 577b9e4ed1b5ab62c56748c067e57b2aef23e2e7 Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 1 Aug 2017 15:38:44 +0800 Subject: [PATCH 2/3] add --- Gruntfile.js | 1 + bi/core.js | 61 +++++++++++++++++++++++++++++++++++++++++++++++- docs/core.js | 61 +++++++++++++++++++++++++++++++++++++++++++++++- src/core/load.js | 60 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 181 insertions(+), 2 deletions(-) create mode 100644 src/core/load.js diff --git a/Gruntfile.js b/Gruntfile.js index 1f1f46d42..0cdf1d2cb 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -127,6 +127,7 @@ module.exports = function (grunt) { 'src/core/shortcut.js', 'src/core/plugin.js', 'src/core/controller.js', + 'src/core/load.js', 'src/core/proto/**/*.js', 'src/core/utils/**/*.js', 'src/core/behavior/behavior.js', diff --git a/bi/core.js b/bi/core.js index e4b54a49a..191ff2377 100644 --- a/bi/core.js +++ b/bi/core.js @@ -5926,7 +5926,66 @@ BI.Controller = BI.inherit(BI.OB, { } }); -BI.Controller.EVENT_CHANGE = "__EVENT_CHANGE__";/** +BI.Controller.EVENT_CHANGE = "__EVENT_CHANGE__";$.extend(BI, { + $defaultImport: function () { + var ars = arguments; + if (ars[0] != null) { + ars[0] = BI.servletURL + '?op=resource&resource=' + ars[0]; + } + this.$import.apply(null, ars); + }, + + $import: function () { + var _LOADED = {}; // alex:保存加载过的 + function loadReady(src, must) { + var $scripts = $("head script"); + $.each($scripts, function (i, item) { + if (item.src.indexOf(src) != -1) { + _LOADED[src] = true; + } + }); + var $links = $("head link"); + $.each($links, function (i, item) { + if (item.href.indexOf(src) != -1 && must) { + _LOADED[src] = false; + $(item).remove(); + } + }); + } + + // must=true 强行加载 + return function (src, ext, must) { + loadReady(src, must); + // alex:如果已经加载过了的,直接return + if (_LOADED[src] === true) return; + if (ext === 'css') { + var link = document.createElement('link'); + link.rel = 'stylesheet' + link.type = 'text/css'; + link.href = src; + var head = document.getElementsByTagName('head')[0]; + head.appendChild(link); + _LOADED[src] = true; + } else { + // alex:这里用同步调用的方式,必须等待ajax完成 + $.ajax({ + url: src, + dataType: "script", // alex:指定dataType为script,jquery会帮忙做globalEval的事情 + async: false, + complete: function (res, status) { + /* + * alex:发现jquery会很智能地判断一下返回的数据类型是不是script,然后做一个globalEval + * 所以当status为success时就不需要再把其中的内容加到script里面去了 + */ + if (status == 'success') { + _LOADED[src] = true; + } + } + }) + } + } + }() +});/** * 对数组对象的扩展 * @class Array */ diff --git a/docs/core.js b/docs/core.js index 6fe5dd752..672f7330b 100644 --- a/docs/core.js +++ b/docs/core.js @@ -23074,7 +23074,66 @@ BI.ShowListener = BI.inherit(BI.OB, { }) } }); -BI.ShowListener.EVENT_CHANGE = "ShowListener.EVENT_CHANGE";/** +BI.ShowListener.EVENT_CHANGE = "ShowListener.EVENT_CHANGE";$.extend(BI, { + $defaultImport: function () { + var ars = arguments; + if (ars[0] != null) { + ars[0] = BI.servletURL + '?op=resource&resource=' + ars[0]; + } + this.$import.apply(null, ars); + }, + + $import: function () { + var _LOADED = {}; // alex:保存加载过的 + function loadReady(src, must) { + var $scripts = $("head script"); + $.each($scripts, function (i, item) { + if (item.src.indexOf(src) != -1) { + _LOADED[src] = true; + } + }); + var $links = $("head link"); + $.each($links, function (i, item) { + if (item.href.indexOf(src) != -1 && must) { + _LOADED[src] = false; + $(item).remove(); + } + }); + } + + // must=true 强行加载 + return function (src, ext, must) { + loadReady(src, must); + // alex:如果已经加载过了的,直接return + if (_LOADED[src] === true) return; + if (ext === 'css') { + var link = document.createElement('link'); + link.rel = 'stylesheet' + link.type = 'text/css'; + link.href = src; + var head = document.getElementsByTagName('head')[0]; + head.appendChild(link); + _LOADED[src] = true; + } else { + // alex:这里用同步调用的方式,必须等待ajax完成 + $.ajax({ + url: src, + dataType: "script", // alex:指定dataType为script,jquery会帮忙做globalEval的事情 + async: false, + complete: function (res, status) { + /* + * alex:发现jquery会很智能地判断一下返回的数据类型是不是script,然后做一个globalEval + * 所以当status为success时就不需要再把其中的内容加到script里面去了 + */ + if (status == 'success') { + _LOADED[src] = true; + } + } + }) + } + } + }() +});/** * style加载管理器 * * Created by GUY on 2015/9/7. diff --git a/src/core/load.js b/src/core/load.js new file mode 100644 index 000000000..ae62faa72 --- /dev/null +++ b/src/core/load.js @@ -0,0 +1,60 @@ +$.extend(BI, { + $defaultImport: function () { + var ars = arguments; + if (ars[0] != null) { + ars[0] = BI.servletURL + '?op=resource&resource=' + ars[0]; + } + this.$import.apply(null, ars); + }, + + $import: function () { + var _LOADED = {}; // alex:保存加载过的 + function loadReady(src, must) { + var $scripts = $("head script"); + $.each($scripts, function (i, item) { + if (item.src.indexOf(src) != -1) { + _LOADED[src] = true; + } + }); + var $links = $("head link"); + $.each($links, function (i, item) { + if (item.href.indexOf(src) != -1 && must) { + _LOADED[src] = false; + $(item).remove(); + } + }); + } + + // must=true 强行加载 + return function (src, ext, must) { + loadReady(src, must); + // alex:如果已经加载过了的,直接return + if (_LOADED[src] === true) return; + if (ext === 'css') { + var link = document.createElement('link'); + link.rel = 'stylesheet' + link.type = 'text/css'; + link.href = src; + var head = document.getElementsByTagName('head')[0]; + head.appendChild(link); + _LOADED[src] = true; + } else { + // alex:这里用同步调用的方式,必须等待ajax完成 + $.ajax({ + url: src, + dataType: "script", // alex:指定dataType为script,jquery会帮忙做globalEval的事情 + async: false, + complete: function (res, status) { + /* + * alex:发现jquery会很智能地判断一下返回的数据类型是不是script,然后做一个globalEval + * 所以当status为success时就不需要再把其中的内容加到script里面去了 + */ + if (status == 'success') { + _LOADED[src] = true; + } + } + }) + } + } + }() +}); \ No newline at end of file From 53caebc6cc9b28e628cba26248c79cd08a83901f Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 1 Aug 2017 15:47:22 +0800 Subject: [PATCH 3/3] add --- Gruntfile.js | 1 - bi/core.js | 61 +----------------------------------------------- docs/core.js | 61 +----------------------------------------------- src/core/load.js | 60 ----------------------------------------------- 4 files changed, 2 insertions(+), 181 deletions(-) delete mode 100644 src/core/load.js diff --git a/Gruntfile.js b/Gruntfile.js index 0cdf1d2cb..1f1f46d42 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -127,7 +127,6 @@ module.exports = function (grunt) { 'src/core/shortcut.js', 'src/core/plugin.js', 'src/core/controller.js', - 'src/core/load.js', 'src/core/proto/**/*.js', 'src/core/utils/**/*.js', 'src/core/behavior/behavior.js', diff --git a/bi/core.js b/bi/core.js index 191ff2377..e4b54a49a 100644 --- a/bi/core.js +++ b/bi/core.js @@ -5926,66 +5926,7 @@ BI.Controller = BI.inherit(BI.OB, { } }); -BI.Controller.EVENT_CHANGE = "__EVENT_CHANGE__";$.extend(BI, { - $defaultImport: function () { - var ars = arguments; - if (ars[0] != null) { - ars[0] = BI.servletURL + '?op=resource&resource=' + ars[0]; - } - this.$import.apply(null, ars); - }, - - $import: function () { - var _LOADED = {}; // alex:保存加载过的 - function loadReady(src, must) { - var $scripts = $("head script"); - $.each($scripts, function (i, item) { - if (item.src.indexOf(src) != -1) { - _LOADED[src] = true; - } - }); - var $links = $("head link"); - $.each($links, function (i, item) { - if (item.href.indexOf(src) != -1 && must) { - _LOADED[src] = false; - $(item).remove(); - } - }); - } - - // must=true 强行加载 - return function (src, ext, must) { - loadReady(src, must); - // alex:如果已经加载过了的,直接return - if (_LOADED[src] === true) return; - if (ext === 'css') { - var link = document.createElement('link'); - link.rel = 'stylesheet' - link.type = 'text/css'; - link.href = src; - var head = document.getElementsByTagName('head')[0]; - head.appendChild(link); - _LOADED[src] = true; - } else { - // alex:这里用同步调用的方式,必须等待ajax完成 - $.ajax({ - url: src, - dataType: "script", // alex:指定dataType为script,jquery会帮忙做globalEval的事情 - async: false, - complete: function (res, status) { - /* - * alex:发现jquery会很智能地判断一下返回的数据类型是不是script,然后做一个globalEval - * 所以当status为success时就不需要再把其中的内容加到script里面去了 - */ - if (status == 'success') { - _LOADED[src] = true; - } - } - }) - } - } - }() -});/** +BI.Controller.EVENT_CHANGE = "__EVENT_CHANGE__";/** * 对数组对象的扩展 * @class Array */ diff --git a/docs/core.js b/docs/core.js index 672f7330b..6fe5dd752 100644 --- a/docs/core.js +++ b/docs/core.js @@ -23074,66 +23074,7 @@ BI.ShowListener = BI.inherit(BI.OB, { }) } }); -BI.ShowListener.EVENT_CHANGE = "ShowListener.EVENT_CHANGE";$.extend(BI, { - $defaultImport: function () { - var ars = arguments; - if (ars[0] != null) { - ars[0] = BI.servletURL + '?op=resource&resource=' + ars[0]; - } - this.$import.apply(null, ars); - }, - - $import: function () { - var _LOADED = {}; // alex:保存加载过的 - function loadReady(src, must) { - var $scripts = $("head script"); - $.each($scripts, function (i, item) { - if (item.src.indexOf(src) != -1) { - _LOADED[src] = true; - } - }); - var $links = $("head link"); - $.each($links, function (i, item) { - if (item.href.indexOf(src) != -1 && must) { - _LOADED[src] = false; - $(item).remove(); - } - }); - } - - // must=true 强行加载 - return function (src, ext, must) { - loadReady(src, must); - // alex:如果已经加载过了的,直接return - if (_LOADED[src] === true) return; - if (ext === 'css') { - var link = document.createElement('link'); - link.rel = 'stylesheet' - link.type = 'text/css'; - link.href = src; - var head = document.getElementsByTagName('head')[0]; - head.appendChild(link); - _LOADED[src] = true; - } else { - // alex:这里用同步调用的方式,必须等待ajax完成 - $.ajax({ - url: src, - dataType: "script", // alex:指定dataType为script,jquery会帮忙做globalEval的事情 - async: false, - complete: function (res, status) { - /* - * alex:发现jquery会很智能地判断一下返回的数据类型是不是script,然后做一个globalEval - * 所以当status为success时就不需要再把其中的内容加到script里面去了 - */ - if (status == 'success') { - _LOADED[src] = true; - } - } - }) - } - } - }() -});/** +BI.ShowListener.EVENT_CHANGE = "ShowListener.EVENT_CHANGE";/** * style加载管理器 * * Created by GUY on 2015/9/7. diff --git a/src/core/load.js b/src/core/load.js deleted file mode 100644 index ae62faa72..000000000 --- a/src/core/load.js +++ /dev/null @@ -1,60 +0,0 @@ -$.extend(BI, { - $defaultImport: function () { - var ars = arguments; - if (ars[0] != null) { - ars[0] = BI.servletURL + '?op=resource&resource=' + ars[0]; - } - this.$import.apply(null, ars); - }, - - $import: function () { - var _LOADED = {}; // alex:保存加载过的 - function loadReady(src, must) { - var $scripts = $("head script"); - $.each($scripts, function (i, item) { - if (item.src.indexOf(src) != -1) { - _LOADED[src] = true; - } - }); - var $links = $("head link"); - $.each($links, function (i, item) { - if (item.href.indexOf(src) != -1 && must) { - _LOADED[src] = false; - $(item).remove(); - } - }); - } - - // must=true 强行加载 - return function (src, ext, must) { - loadReady(src, must); - // alex:如果已经加载过了的,直接return - if (_LOADED[src] === true) return; - if (ext === 'css') { - var link = document.createElement('link'); - link.rel = 'stylesheet' - link.type = 'text/css'; - link.href = src; - var head = document.getElementsByTagName('head')[0]; - head.appendChild(link); - _LOADED[src] = true; - } else { - // alex:这里用同步调用的方式,必须等待ajax完成 - $.ajax({ - url: src, - dataType: "script", // alex:指定dataType为script,jquery会帮忙做globalEval的事情 - async: false, - complete: function (res, status) { - /* - * alex:发现jquery会很智能地判断一下返回的数据类型是不是script,然后做一个globalEval - * 所以当status为success时就不需要再把其中的内容加到script里面去了 - */ - if (status == 'success') { - _LOADED[src] = true; - } - } - }) - } - } - }() -}); \ No newline at end of file