自定义模块的定义和使用:
dojo的自定义模块使用define。
dojo的js模块就是一个js文件,文件中使用如下形式定义:
define( [ "dojo/_base/declare", "dojo/_base/lang", "esri/request" ], function(declare,lang,esriRequest){ return declare(null,{ constructor:function(options){ this.distance=options.distance||'20mi'; }, func:function(){ return this.distance; } }); } );
格式和require类似,第一个参数表示会用到的模块;第二个参数是一个函数,函数参数和第一个参数对应,函数体中进行相关代码编写。
define定义模块,但是模块只是一个组织概念,要使用自定义的函数、变量,我们需要一个结构将这些内容打包并返回。我们使用declare定义这种结构(或者叫类),然后在define第二个函数参数的返回值中返回,然后我们在外面的模块就可以使用这里定义的函数和变量了。
模块的使用:
模块定义好,放在项目的一个文件夹中,但是如何使用require进行访问呢?这需要在dojo初始化配置参数中,对应路径:
var dojoConfig={paths:{extras:location.pathname.replace(//[^/]+$/,'')+"/scripts/dtest"}}
在引入dojo,或者init之前定义dojoConfig变量,格式如上:extras是自定义的虚拟路径,用于在requre引入的时候使用。后面则是自定义的js模块文件所在的url。
然后就是引入:
require([ "extras/tmodule", "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dijit/TitlePane", "dojo/domReady!" ], function(mtest) { alert(mtest); alert(typeof mtest); var b = mtest({}).c2({}); alert(b.getm()); alert(s.getMore()); });