首页 web前端 js教程 AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法_jquery

AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法_jquery

May 16, 2016 pm 04:45 PM
amd jquery

AMD 模块

AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一个可用的模块化 JavaScript 的解决方案。

AMD 模块格式本身是一个关于如何定义模块的提案,在这种定义下模块和依赖项都能够异步地进行加载。它有很多独特的优势,包括天生的异步及高度灵活等特性,这些特性能够解除常见的代码与模块标识间的那种紧密耦合。目前它已经被很多项目所接纳,包括jQuery(1.7)。

RequireJS

RequireJS是一个工具库,主要用于客户端的模块管理。它可以让客户端的代码分成一个个模块,实现异步或动态加载,从而提高代码的性能和可维护性。它的模块管理遵守AMD规范。

jQuery 对AMD的支持

jQuery 1.7 开始支持将 jQuery 注册为一个AMD异步模块。有很多兼容的脚本加载器(包括 RequireJS 和 curl)都可以用一个异步模块格式来加载模块,这也就表示不需要太多 hack 就能让一切运行起来。可以看看jQuery 1.7 中的源码:

复制代码 代码如下:

// Expose jQuery as an AMD module, but only for AMD loaders that
// understand the issues with loading multiple versions of jQuery
// in a page that all might call define(). The loader will indicate
// they have special allowances for multiple jQuery versions by
// specifying define.amd.jQuery = true. Register as a named module,
// since jQuery can be concatenated with other files that may use define,
// but not use a proper concatenation script that understands anonymous
// AMD modules. A named AMD is safest and most robust way to register.
// Lowercase jquery is used because AMD module names are derived from
// file names, and jQuery is normally delivered in a lowercase file name.
if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
 define( "jquery", [], function () { return jQuery; } );
}

其工作的原理是,所使用的脚本加载器通过指定一个属性,即 define.amd.jQuery 为 true,来标明自己可以支持多个 jQuery 版本。如果有兴趣了解特定的实现细节的话,我们可以将 jQuery 注册为一个具名模块,因为可能会有这样的风险,即它可能被与其它使用了 AMD 的 define() 方法的文件拼合在一起,而没有使用一个合适的、理解匿名 AMD 模块定义的拼合脚本。

高版本的jQuery (1.11.1) 去掉了define.amd.jQuery判断:

复制代码 代码如下:

if ( typeof define === "function" && define.amd ) {
 define( "jquery", [], function() {
  return jQuery;
 });
}

Require.js中使用jQuery

Require.js中使用jQuery非常方便,简单配置就可以了,例如:

复制代码 代码如下:

// 简单的配置
require.config({

    // RequireJS 通过一个相对的路径 baseUrl来加载所有代码。baseUrl通常被设置成data-main属性指定脚本的同级目录。
    baseUrl: "./js",

    // 第三方脚本模块的别名,jquery比libs/jquery-1.11.1.min.js简洁明了;
    paths: {

        "jquery": "libs/jquery-1.11.1.min.js"

    }

});

// 开始使用jQuery 模块
require(["jquery"], function ($) {

    //你的代码
    //这里直接可以使用jquery的方法,比如:$( "#result" ).html( "Hello World!" );

});

Require.js中使用jQuery 插件

虽然jQuery的支持AMD的API, 这并不意味着jQuery插件也是和AMD兼容的。

一般的jQuery 插件格式:

复制代码 代码如下:
(function ($) {
    $.fn.m​​yPlugin = function () {
        //你自己的插件代码
    };
})(jQuery);

不过我们稍微修改一下就可以使用Require.js加载一个jQuery插件:
复制代码 代码如下:

;(function (factory) {
    if (typeof define === "function" && define.amd) {
        // AMD模式
        define([ "jquery" ], factory);
    } else {
        // 全局模式
        factory(jQuery);
    }
}(function ($) {
    $.fn.jqueryPlugin = function () {
        //插件代码
    };
}));

Require.js中使用jQuery UI组件

Require.js中使用jQuery UI组件也类似的,只要改造一下jQuery Widget Factory 代码就可以了,并且感觉jQuery UI的依赖关系加载就可以了。例如:

复制代码 代码如下:

(function (widgetFactory) {

    if (typeof define === "function" && define.amd) {
        // AMD模式
        define("jquery.ui.widget", ["jquery"], function () {

            widgetFactory(window.jQuery);

        });
    } else {
        // 全局模式
        widgetFactory(window.jQuery);
    }
}
(function ($, undefined) {

    // jQuery Widget Factory 代码

}));
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

OneXGPU 2 中的 AMD Radeon RX 7800M 性能优于 Nvidia RTX 4070 笔记本电脑 GPU OneXGPU 2 中的 AMD Radeon RX 7800M 性能优于 Nvidia RTX 4070 笔记本电脑 GPU Sep 09, 2024 am 06:35 AM

OneXGPU 2 是首款搭载 Radeon RX 7800M 的 eGPU,而 AMD 尚未宣布推出这款 GPU。据外置显卡方案制造商One-Netbook透露,AMD新GPU基于RDNA 3架构,拥有Navi

华硕推出 Adol Book 14 Air,搭载 AMD Ryzen 9 8945H 和好奇的香炉 华硕推出 Adol Book 14 Air,搭载 AMD Ryzen 9 8945H 和好奇的香炉 Aug 01, 2024 am 11:12 AM

华硕已经提供了多款 14 英寸笔记本电脑,包括 Zenbook 14 OLED(亚马逊售价 1,079.99 美元)。现在,它决定推出 Adol Book 14 Air,从表面上看它就像一台典型的 14 英寸笔记本电脑。然而,一个不起眼的元

Ryzen AI 软件获得对新 Strix Halo 和 Kraken Point AMD Ryzen 处理器的支持 Ryzen AI 软件获得对新 Strix Halo 和 Kraken Point AMD Ryzen 处理器的支持 Aug 01, 2024 am 06:39 AM

AMD Strix Point 笔记本电脑刚刚上市,下一代 Strix Halo 处理器预计将于明年某个时候发布。不过,该公司已经在其 Ryzen AI 软件中添加了对 Strix Halo 和 Krackan Point APU 的支持。

适用于手持游戏机的 AMD Z2 Extreme 芯片预计将于 2025 年初推出 适用于手持游戏机的 AMD Z2 Extreme 芯片预计将于 2025 年初推出 Sep 07, 2024 am 06:38 AM

尽管 AMD 为手持游戏机量身定制了 Ryzen Z1 Extreme(及其非 Extreme 变体),但该芯片只出现在两款主流手持设备中:华硕 ROG Ally(亚马逊售价 569 美元)和联想 Legion Go(三款)。如果你算一下R

AMD 公布'Sinkclose”高危漏洞,数百万锐龙和 EPYC 处理器受影响 AMD 公布'Sinkclose”高危漏洞,数百万锐龙和 EPYC 处理器受影响 Aug 10, 2024 pm 10:31 PM

本站8月10日消息,AMD官方确认,部分EPYC和Ryzen处理器存在一个名为“Sinkclose”的新漏洞,代码为“CVE-2023-31315”,可能涉及全球数百万AMD用户。那么,什么是Sinkclose呢?根据WIRED的一份报告,该漏洞允许入侵者在“系统管理模式(SMM)”中运行恶意代码。据称,入侵者可以使用一种名为bootkit的恶意软件控制对方系统,而这种恶意软件无法被杀毒软件检测到。本站注:系统管理模式(SMM)是一种特殊的CPU工作模式,旨在实现高级电源管理和操作系统独立功能,

传言首款搭载 Ryzen AI 9 HX 370 的 Minisforum 迷你电脑将以高价推出 传言首款搭载 Ryzen AI 9 HX 370 的 Minisforum 迷你电脑将以高价推出 Sep 29, 2024 am 06:05 AM

Aoostar 是最早推出 Strix Point 迷你电脑的公司之一,随后 Beelink 推出了 SER9,起价高达 999 美元。 Minisforum 通过调侃 EliteMini AI370 加入了聚会,顾名思义,它将是该公司的

交易 |配备 120Hz OLED、64GB RAM 和 AMD Ryzen 7 Pro 的 Lenovo ThinkPad P14s Gen 5 现在有 60% 折扣 交易 |配备 120Hz OLED、64GB RAM 和 AMD Ryzen 7 Pro 的 Lenovo ThinkPad P14s Gen 5 现在有 60% 折扣 Sep 07, 2024 am 06:31 AM

这些天许多学生都回到了学校,有些人可能会注意到他们的旧笔记本电脑不再能胜任这项任务。一些大学生甚至可能正在市场上购买一款配备华丽 OLED 屏幕的高端商务笔记本电脑,在这种情况下

Beelink SER9:紧凑型 AMD Zen 5 迷你 PC 宣布配备 Radeon 890M iGPU,但 eGPU 选项有限 Beelink SER9:紧凑型 AMD Zen 5 迷你 PC 宣布配备 Radeon 890M iGPU,但 eGPU 选项有限 Sep 12, 2024 pm 12:16 PM

Beelink 继续以惊人的速度推出新的迷你电脑和随附配件。回顾一下,自发布 EQi12、EQR6 和 EX eGPU 扩展坞以来,已经过去了一个多月的时间。现在,该公司已将注意力转向AMD的新Strix

See all articles