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