1、Bootstrap的作用域
2、Bootstrap的类定义
3、Bootstrap的插件定义
4、Bootstrap的事件代理
5、Bootstrap的对象数据缓存
6、Bootstrap的防冲突
7、作用域外如何使用Button类
8、Bootstrap的单元测试
Bootstrap的作用域
Bootstrap每个插件都定义在下面这段作用域代码中:
+function ($) { ... }(window.jQuery)请看《IIFE》和《严格模式》编译环境。
在插件的作用域之外,全局范围执行代码的第一行,检测了jQuery是否定义。在Grunt的concat任务中,合并所有插件时,检测代码添加在目标文件的banner说明后面。Grunt.js的相关代码:
jqueryCheck: 'if (typeof jQuery === "undefined") { throw new Error("Bootstrap requires jQuery") }\n\n', concat: { options: { banner: '<%= banner %><%= jqueryCheck %>', stripBanners: false }, bootstrap: { src: [ 'js/transition.js', 'js/alert.js', 'js/button.js', 'js/carousel.js', 'js/collapse.js', 'js/dropdown.js', 'js/modal.js', 'js/tooltip.js', 'js/popover.js', 'js/scrollspy.js', 'js/tab.js', 'js/affix.js' ], dest: 'dist/js/<%= pkg.name %>.js' } }
Bootstrap的类定义
var Button = function (element, options) { this.$element = $(element) this.options = $.extend({}, Button.DEFAULTS, options) } Button.DEFAULTS = { loadingText: 'loading...' } Button.prototype.setState = function (state) { ... } Button.prototype.toggle = function () { ... }
Bootstrap采用这种类定义方式的好处,以及Javascript其他几种类定义的方式,请参照《Javascript面向对象编程(一):封装》
Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。在Button函数体内部定义的属性和方法可以看做是类的私有属性和方法, 为Button.prototype对象定义的属性和方法都可以看做是类的公共属性和方法。这个类封装了插件对象初始化所需的方法和属性。
Bootstrap的插件定义
请参看《jQuery插件开发快速入门》,注意两个this指向的是不同对象
$.fn.button = function (option) { return this.each(function () { var $this = $(this) ... }) }
Bootstrap的事件代理
Bootstrap Button插件定义最后一部分,事件绑定是这么写的
$(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { ... })
这段JavaScript代码将click委托事件监听器绑定在document元素上,并给click事件赋予命名空间click.bs.button.data-api,选择器匹配的是属性data-toggle的值为"button"开头的标签。
关于jQuery将事件绑定在document文档对象上的好处,就是js事件代理的优点,性能上做了一个测试比较。
关于jQuery命名空间的好处,请参看《jQuery .on() and .off() 命名空间》
Bootstrap的防止冲突
jQuery是全局对象,所以jQuery的插件定义$.fn.button并不受作用域限制。如果在别的插件中同样定义了button插件,后加载的button插件将会覆盖先加载的button插件,jsbin示例:
// Old button +function($){ $.fn.button = function() { alert('Old button') } }(window.jQuery) // Bootstrap button +function($){ $.fn.button = function() { alert('Bootstrap button') } }(window.jQuery) $('a').button() // alert('Bootstrap button')
相关推荐
总的来说,Bootstrap模态窗口的源码解析涉及了jQuery插件的基本结构、事件处理、动画效果以及DOM操作等多个方面。通过注释和源码阅读,开发者可以更深入地理解其工作原理,从而更好地在项目中使用和定制模态窗口功能...
在BootStrap源码解析部分,我们深入理解了CSS组件和JavaScript插件的工作原理和内部架构。其中,CSS组件涉及到了架构设计思想、基础样式、颜色样式、尺寸样式、状态样式、特殊元素样式、并列元素样式、嵌套子元素...
“mvc+bootstrap源码”指的是基于MVC(Model-View-Controller)设计模式和Bootstrap前端框架的网站源代码。MVC是一种软件设计模式,常用于Web应用程序开发,将业务逻辑、数据和用户界面分离,提高代码的可维护性和可...
Bootstrap是世界上最流行的前端开发框架之一,它为开发者提供了丰富的组件、样式和JavaScript插件,用于快速构建响应式、移动优先的网页。深入理解Bootstrap-5意味着我们要探讨这个最新版本带来的新特性和改进,以及...
华章出版社的资源往往具有很高的专业性和权威性,因此这份源代码解析很可能包含详细的注释和解释,帮助读者更好地理解Bootstrap的实现细节。通过学习,我们可以提高对Bootstrap的理解,提升网站开发效率,同时也能...
在本文中,我们将深入探讨如何在JavaWeb项目中利用Bootstrap Table进行数据展示、分页以及...通过研究提供的源码,开发者可以学习到如何在JavaWeb项目中有效地集成和使用Bootstrap Table,提升Web应用的数据管理能力。
在源码解析中,我们可以看到Tooltip插件的核心功能和实现方式。首先,`Tooltip`是一个构造函数,它接受一个DOM元素和一个选项对象作为参数。`this.init`方法用于初始化插件,这里会设置一些基础属性,如`type`、`...
《基于Thinkphp与Bootstrap的项目管理系统源码解析》 在当今快速发展的信息技术领域,高效的项目管理是企业成功的关键。Thinkphp作为一款广受欢迎的PHP框架,以其轻量级、高效和灵活的特点,为企业构建Web应用提供...
在“bootstrap的fileinput源码以及js文档”中,我们可以深入理解其内部工作原理和如何在项目中应用。 源码分析: 1. **文件结构**:源码通常包含JavaScript文件、CSS样式表、图片资源以及示例HTML模板。`kartik-v-...
基于PHP开发的固定资产管理系统+源码+开发文档+源码解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于PHP开发的固定资产管理系统+源码+开发文档+源码解析...
总之,"李炎恢bootstrap视频教程源码课件"是一份全面而实用的学习资源,无论你是初学者还是有一定经验的开发者,都能从中受益匪浅。通过学习和实践,你将能够熟练运用Bootstrap构建现代化的Web应用,满足不断变化的...
Thymeleaf 模板文件通常位于 `templates` 子目录下,它们会根据 Thymeleaf 表达式解析动态数据。 4. `pom.xml`: Maven 或 Gradle 的构建文件,定义了项目依赖,如 SpringBoot、Thymeleaf 和 Bootstrap。 5. `....
这个系统源码的压缩包名为"Bootstrap+PHP+MySQL完成学生选课系统源码.zip",包含的主目录为"student-system-master",这为我们提供了全面了解和学习此类系统开发的宝贵资源。 一、Bootstrap:响应式网页设计基础 ...
《基于Thinkphp与Bootstrap的项目管理系统源码解析》 在当今快速发展的信息技术领域,项目管理系统的应用已经成为企业管理的重要工具。本篇文章将详细解读一个基于Thinkphp框架与Bootstrap前端UI库构建的项目管理...
Bootstrap Table PageJump 源码解析与应用指南 Bootstrap Table 是一个流行的JavaScript库,用于创建交互式的、响应式的HTML表格。在数据量较大时,分页功能是必不可少的,而`bootstrap-table-pagejump`插件则扩展...
"SpringBoot启动过程源码解析" SpringBoot启动过程可以分为多个阶段,包括构造SpringApplication对象、推测Web应用类型、获取BootstrapRegistryInitializer对象、获取ApplicationContextInitializer对象、获取...
通过查看和分析源码,开发者可以学习到如何将Bootstrap的组件和样式应用于实际项目,同时也能了解如何组织和优化代码结构。 总的来说,这个压缩包是一个全面的学习和实践Bootstrap的资源集合,对于初学者和有经验的...
### Netty源码解析知识点概览 #### 一、Netty简介与应用场景 - **Netty**是一款由JBOSS提供的高性能的异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。 - **应用场景**:Netty广泛...