文档章节

ExtJS 4.2 系列教程(2):bootstrap.js加载

hanfeng
 hanfeng
发布于 2014/06/10 16:36
字数 768
阅读 2199
收藏 1
点赞 0
评论 0

通过上一篇DEMO的运行结果截图,我们可以看出,在index.jsp页面上,我们只是引入bootstrap.js这个文件,页面加载时候bootstrap.js会帮助我们自动判断加载ext-all-*.js的文件。

那么它是怎么确定要引用哪个ExtJS文件的呢?我们的目录中有分别有三个文件:

ext-all-debug.js:用于调试时引用

ext-all-dev.js:用于开发时引用

ext-all.js:在发布时引用

我们可以查看bootstrap.js的源代码一探究竟:

/**
 * Load the library located at the same path with this file
 *
 * Will automatically load ext-all-dev.js if any of these conditions is true:
 * - Current hostname is localhost
 * - Current hostname is an IP v4 address
 * - Current protocol is "file:"
 *
 * Will load ext-all.js (minified) otherwise
 */

从文件注释可以知道信息:

/**
 * 加载本文件相同路径中的库
 *
 * 满足以下条件将自动加载 ext-all-dev.js:
 * - 当前主机名是 localhost
 * - 当前主机名是 IP v4 地址
 * - 当前协议是 "file:"
 *
 * 其它情况下将加载 ext-all.js (minified)
 */

因为我们本地开发发布的地址路径必然是localhost,所有自动加载的就是ext-all-dev.js文件。上篇被我修改成debug模式啦。

(function() {
    var scripts = document.getElementsByTagName('script'),
        localhostTests = [
            /^localhost$/,
            /\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(:\d{1,5})?\b/ // IP v4
        ],
        host = window.location.hostname,
        isDevelopment = null,
        queryString = window.location.search,
        test, path, i, ln, scriptSrc, match;

    for (i = 0, ln = scripts.length; i < ln; i++) {
        scriptSrc = scripts[i].src;

        match = scriptSrc.match(/bootstrap\.js$/);

        if (match) {
            path = scriptSrc.substring(0, scriptSrc.length - match[0].length);
            break;
        }
    }

    if (queryString.match('(\\?|&)debug') !== null) {
        isDevelopment = true;
    }
    else if (queryString.match('(\\?|&)nodebug') !== null) {
        isDevelopment = false;
    }

    if (isDevelopment === null) {
        for (i = 0, ln = localhostTests.length; i < ln; i++) {
            test = localhostTests[i];

            if (host.search(test) !== -1) {
                isDevelopment = true;
                break;
            }
        }
    }

    if (isDevelopment === null && window.location.protocol === 'file:') {
        isDevelopment = true;
    }

    document.write('<script type="text/javascript" charset="UTF-8" src="' + 
        path + 'ext-all' + (isDevelopment ? '-debug' : '') + '.js"></script>');
})();

源代码解读:

1、首先使用getElementsByTagName获取页面中所有带有script标记的元素,然后从中找出带有bootstrap.js的标记,将bootstrap.js的相对路径取出来保存在path中。

2、判断url的参数中是否有“debug”字符,例如,出现http://localhost/index.html? debug,则设置isDevelopment 为true。否则检测是否有“nodebug”字符,如果有,设置为false。如果以上两个条件都不符合,isDevelopment 还是初始值null,就要判断url的域名是否是“localhost”或IPv4地址,如果是,则isDevelopment设置为true。

3、如果isDevelopment是null且当前的url的协议是“file:”,则将isDevelopment 设置为true。如果isDevelopment为true时,则加载ext-all-debug.js文件,否则加载ext-all.js文件。

通过bootstrap.js,可自动控制加载ext-all-debug.js文件或ext-all.js文件,不用我们自己去修改script标记,非常方便。但如果你觉得自己修改方便,也可以使用Ext JS旧版的方式加载脚本文件。


© 著作权归作者所有

共有 人打赏支持
hanfeng
粉丝 19
博文 44
码字总数 36874
作品 0
福州
高级程序员
ZooKeeper 可视化工具 - ZooHelper

ZooHelper 一款基于 PHP + ExtJS 开发的 ZooKeeper 可视化工具 工具特性 树形展示znode节点 支持znode节点CURD操作 下载地址 https://github.com/yoonper/ZooHelper 环境要求 Linux PHP >= 5...

YoonPer ⋅ 05/28 ⋅ 0

ExtJS对类型为xtype:button的按钮进行不可用置灰的设置

在项目中会根据业务需要对页面中的组件进行各种操作,比如隐藏、改变组件显示名称、可用不可用等。今天介绍下如何使用ExtJS对xtype:button的按钮进行可用和不可用的设置。 页面中xtype:butto...

laowang2915 ⋅ 05/31 ⋅ 0

HTTP请求状态及jQuery AJAX请求异常处理

上一周调优一个项目的Js部分,其中一个严重的问题就是在页面初始化数据时,没有对异常进行处理, 导致Loading一直在等待中,无提示无处理。在用户体验上很不好,即使网络条件无法保证,在出错...

临江仙卜算子 ⋅ 06/22 ⋅ 0

ExtJS 4.2 系列教程(1):Hello ExtJS4

1、下载ExtJS http://www.sencha.com/ 我下载的版本是 ext-4.2.1.883 2、使用Eclipse创建Dynamic Web Project ,不懂的自行google(今天下午彻底挂了)or 百度 3、引入ExtJS库 复制ext目录下...

hanfeng ⋅ 2014/06/10 ⋅ 0

JavaWeb05-HTML篇笔记(一)

1.1上次课内容回顾: JQuery: JQuery的概述:是一个轻量级的JavaScript的类库.对JS进行封装. 常见的JS的框架: JQuery的使用: JQuery的选择器:(*) JQuery实现效果: JQuery样式操作: JQuer...

我是小谷粒 ⋅ 05/10 ⋅ 0

物联网和前端技术,两者相辅相成并且互相促进 —— 阿里云 MVP 黄强专访

黄强,江苏智慧新吴信息科技有限公司 ,前端架构师。 一直从事前端开发,从 jQuery,ExtJs,Backbone、Angular 到 React 一路走来,深入实践不同业务领域的前端平台架构,致力于前端工程化和...

花肉酱 ⋅ 04/20 ⋅ 0

创业还差一个程序员?也许你只是没找对方法 —— 南京云栖大会 Tech Insight 创业公司的窘境和解法

你也许经常听到一些人说:”我有一个创业的点子,就差一个程序员了“,也许隔三差五就有人向你打听,哪里能挖到最合适的程序员? 创业是一个永恒的话题,技术人才紧缺也是一个永恒的话题。面...

花肉酱 ⋅ 04/23 ⋅ 0

docker的nginx怎么和php-fpm结合?

我创建了两个docker分别是nginx和php-fpm nginx自己配置成功了(静态文件能访问),但是php文件报错 这个错误!!!!!不是php写的不对,,,,,,不明所以啊 这是 nginx的 的配置 下面的是 在php-fpm容器...

1514582970 ⋅ 02/07 ⋅ 0

Maven的本地仓库、中心仓库、私服(NEW)

本地仓库 设置本地仓库到指定目录,而不使用Maven默认的配置(默认放在C:/user/m2.目录下) 打开Maven的解压目录E:softapache-maven-3.1.0conf,修改settings.xml 配置localRepository即可完...

SuShine ⋅ 05/23 ⋅ 0

给你一个整型数组(索引从0到n-1,其中n是这个数组的大小,值从0到10000)和一个查询列表。对于每个查询,给你一个整数,返回数组中小于给定整数的元素数。

public static List<Integer> countOfSmallerNumber(int[] A, int[] queries) { List<Integer> result = new ArrayList<Integer>(queries.length); int step =20; if(A!=null && A.length>1)......

一览无余 ⋅ 02/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 48分钟前 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

SpringBoot简单使用ehcache

1,SpringBoot版本 2.0.3.RELEASE ①,pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELE......

暗中观察 ⋅ 昨天 ⋅ 0

Spring源码解析(八)——实例创建(下)

前言 来到实例创建的最后一节,前面已经将一个实例通过不同方式(工厂方法、构造器注入、默认构造器)给创建出来了,下面我们要对创建出来的实例进行一些“加工”处理。 源码解读 回顾下之前...

MarvelCode ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部