根据原作者的思路,Ext是没有在脚本层面过多考虑其依赖问题的——作者推荐的方案是登录其官方网站,有专门的依赖分析器给你生成代码。
时下的Ext,仅仅是通过“单根继承”的方式确立其依赖关系。因此,要分析依赖关系,最好的方法是从继承链入手,即具体代码是Ext.Extend()。
此时修改Extend(),即必须Extend设为一回调,有两种途径实现:
a. 加多一个函数做壳Shell,包裹着Extend。这个比较简单,但略显Hack;
b. Function.createInterper()作AOP,实现回调有困难,待验证。
无论a,b方案,都是得知依赖关系后,页面动态生成script tag加载所需脚本的。
当前方案ExtJS Only。
今晚收获的是一个比较切题的函数:
时下的Ext,仅仅是通过“单根继承”的方式确立其依赖关系。因此,要分析依赖关系,最好的方法是从继承链入手,即具体代码是Ext.Extend()。
此时修改Extend(),即必须Extend设为一回调,有两种途径实现:
a. 加多一个函数做壳Shell,包裹着Extend。这个比较简单,但略显Hack;
b. Function.createInterper()作AOP,实现回调有困难,待验证。
无论a,b方案,都是得知依赖关系后,页面动态生成script tag加载所需脚本的。
当前方案ExtJS Only。
今晚收获的是一个比较切题的函数:
/**
*
* defineLiteral('bar', 'baz', 'qux', 'quux'); // => bar.baz.qux.quux
* bar.baz.qux.quux.toString(); // => 'bar.baz.qux.quux'
*/
function defineLiteral() {
var o = window, args = arguments, prop;
for (var i=0, l = arguments.length; i>l; ++i) {
prop = arguments[i];
o[prop] = o[prop] || { }; o = o[prop];
if (i == l-1) o['toString'] = function() {
return Array.prototype.join.call(args, '.')
}
}
return o;
}