热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ProjectOne(04)-番外篇02requirejs初体验

前几天有个猎头找到俺,说起看到我在智联上的简历。说有个公司想让我去面试一下。就顺便转发了一下招聘要求。看了一眼。猴赛雷!!!是招Web前端,最好还有hybridapp开发经验。

前几天有个猎头找到俺,说起看到我在智联上的简历。

说有个公司想让我去面试一下。就顺便转发了一下招聘要求。

看了一眼。

猴赛雷!!!是招Web前端,最好还有hybrid app开发经验。

我看了一圈,除了懂了一点加分项nodejs之外。貌似别的都不太及格的样子。

好吧,既然咱不懂,咱就来学呗。多大点事。


其中有一个名词叫requirejs,

百度了一下,貌似就是个模块适时加载器的作用。


ok,那么,今天就在ProjectOne上写一个requirejs的测试项目呗。

首先,我们现在ProjectOne下面新建一个项目咯。

在ProjectOne的根目录下的web目录里面,新建一个Test文件夹,然后Test文件夹下面新建一个001文件夹,

再然后在这个文件夹下面新建一个index.html和一个js文件夹。


接着,当然还是去requirejs的官网下一个包啦。地址是这个:http://requirejs.org/docs/download.html

当前requirejs的版本是2.1.22,我们选择右边的minified,右键目标另存为,进行保存。

将它存到ProjectOne/Test/001/js文件夹下面。



然后,因为是要测试动态加载,那么加载的js我们自然也要选一个咯。

好吧,那就加载jQuery和zepto,这两个比较常用的包吧!


去jQuery官网和zepto(官?)网...(http://www.css88.com/doc/zeptojs_api/),分别下了两个包:jquery-1.12.1.min.js 和 zepto.min.js (1.1.6版)

下2个包是因为听说在requirejs里面不能用zepto。

虽然《bootstrap中文网》不推荐我们用Zepto,(原文:http://www.bootcss.com/article/why-we-dropped-zepto/)

但是Zepto还是很多人在用的。所以暂时还是考虑尝试支持一下。


分别将2个包夜同样拷贝到js文件夹下面。


下面开始写代码。

测试思路很简单,

写3个按钮,1个同时加载2个包,2个分别对应加载对应的包。

写2个输入框,通过点击按钮改变框内的内容。

都是用jQuery和zepto的语法来进行操作。

然后观察chrome的F12(开发者工具/Firebug),查看network一项,看模块是不是正确在点击按钮后,加载对应的模块。


下面是实例代码。

首先,我们的index页面需要上面说的3个按钮2个输入框,并且要3个简单的点击事件。

代码大概是这样的。







输入框1:


输入框2:








然后,在head中引入requirejs包,

这里要注意一点就是,引入requirejs包需要在后面添加一个data-main属性。

这里的js/main是声明requirejs包的入口函数是js文件夹下的main.js文件。(这个写法有点像java ? 
 

然后,我们就需要在js文件夹下面创建一个main.js文件咯。

这个js文件前提是需要包含一个自执行函数,我们就习惯性的匿名咯。

主要作用就是配置一个require.config函数对象的样子。看如下代码:

(function(){
    require.config({
        baseUrl:    'js/',
        defaultExt: '.js',
        paths:{
            jquery:'jquery-1.12.1.min',
            zepto:'zepto.min'
        }
    });
})();

这里的baseUrl是为了将路径引导到js文件夹下面,如果不用的话,那么下面的path就要写成zepto:'js/zepto.min'这样的了。

defaultExt是为了配置引用的文件的默认后缀名,所以下面的paths里面指定的文件“不需要加.js”。(貌似也不允许加

这样配置就完成了。(paths里面的jquery属性名请全小写,别问我为什么...


然后,我们就在index.html的script部分,click_jquery和click_zepto函数里加几句代码试一下效果吧。

requirejs的语法是这样的 require([path中定义的模块名,多个用逗号分隔],function(如果有的话,传入模块的对象,如$,必须按顺序){//todo}); 这样。

那么示范代码就写成这样。

    function click_jquery(){
require(['jquery'],function(jQuery){
jQuery('#input2').val('click_jquery jquery!');
});
}

function click_zepto(){
require(['zepto'],function($){
$('#input1').val('click_zepto zepto!');
});
}

这个时候,我们去点击“加载jQuery”按钮,输入框2是能正确显示的,

但是!!!点击“加载Zepto”却不行。

这是因为zepto的代码不符合AMD规范,

这时,从百度可以得知有几种解决办法。

第一种是改zepto的代码,但是我个人觉得麻烦,就用第二种,

requirejs的conifg里面加一个shim属性,这个属性是为了支持那些不规范的代码用的。

我们加入以下代码:

paths:{.....}
,
shim:{
zepto:{
exports:'$'
}
}
这样,“加载Zepto”按钮也有效果了。


刷新页面,打开F12观察Network。可以看到,分别点击2个按钮之后,是分别加载2个包文件的。


接下来,我们补充完click_all的代码:

    function click_all(){
require(['zepto','jquery'],function($,jQuery){
$('#input1').val('click_all zepto !');
jQuery('#input2').val('click_all jQuery!');
});
}
再次刷新页面。点击click_all的按钮可以看到两个包都被同时加载了。


至此,

我们的引入require.js包,设置main.js文件,

配置require.config里面的属性,配置paths,非标准包shim,

require()引用并调用。

这几个步骤都做完了。

这也是一个比较基本的,基础的requirejs的用法了吧!!!???对吧。。。


说不定还有人要我说说用它的好处。

好处就是一开始不用加载很多包,

能迅速展示页面,

并且通过shim能模块化很多包及功能,适合更庞大的系统开发和组合。

就酱紫!


推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
author-avatar
小帅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有