first:为何使用?javascript
1,web开发js的占用比例愈来愈大,引入的插件也愈来愈多,维护困难,一个一个的script的写要废java
2,模块开发的需求jquery
3,有时候javascript的运用是有依赖的需求的,大量的使用难以保证依赖顺序,出现不存在的问题web
second:这是个坑,使用前的提示:ajax
使用的环境是服务器的web环境,单纯的没有服务器的静态页面使用根本没有反应!json
third:废话很少说,直接上图片:bootstrap
index.jsp是个人页面,全部的js文件所有放在JS文件夹服务器
1.main.jsjsp
requirejs.config({ baseUrl: 'js', paths: { jquery: "lib/jquery/jquery-1.12.4.min", bootstrap: "lib/bootstrap/bootstrap.min", relatedselect: "plugin/relatedSelect", }, shim: { bootstrap: ["jquery"], relatedselect: ["jquery"] } }); require(['relatedselect','jquery'], function (relatedselect,jquery) { console.log("=======use======="); var result = [ { "children":[ {"name":"城中社区","code":"370523100"}, {"name":"城里社区","code":"370523200"} ], "code":370523, "name":"广饶街道" } ] ; /*$.ajax({ type: "POST",//请求方式 url: "/item.json",//地址,就是json文件的请求路径 dataType: "json",//数据类型能够为 text xml json script jsonp success: function(result){//返回的参数就是 action里面全部的有get和set方法的参数 console.log(result); }, error:function(xhr,textStatus){ console.log('错误') console.log(xhr) console.log(textStatus) }, });*/ var config = { defaultText : [ '=街道=', '=管区=', '=社区(村)=' ], firstParentCode : '', data : result, isPreAppend : true, renderId : 'party-rs', nameList : [ 'country', 'town', 'village' ], preLabel : [ '请选择行政区划:', '', '' ], listeners : { onRender : function(select) { $('#' + (select.idList)[0] + ' option[value!=""]')[0].selected = true; select .onChange(select.getByIndex(0), 0); } } }; new RelatedSelect(config); console.log(jquery); });
注意:async
坑之一:baseUrl若是没有设定,那会默认为加载data-main的路径,若是在config(main)中申明了,就是它,都没有,那就是require.js所在路径,paths的设定相对路径都是它位参考的,模块的引入require和define天然也是以config(main)中的baseUrl为参考的相对路径(如:baseUrl:'/js/modle',那么意思就是全部的相对路径都是以modle目录里面为参考),可是baseUrl何时不起做用呢?就是用了/(根目录符号开头),http开头的路径和....js结尾的,这么一想仍是很人性的哈!
坑之二:若是有多个的入口文件,那么,就不能申明data-main在标签中了,就得在各个页面中分别写require.config({}),可是又有个问题了,什么问题呢?就是啊,若是引入require.js时候是defer async='true' 那么后面的require.config会说没有定义,因此,引入require.js的标签通常都不写前面的defer async='true'了.也是醉了