dojo 模块之define
Dojo中的模块,最直接的理解就是 Java 里的 Class ,只有语法的区别,概念是一样的。 dojo.define() 使用 define 来定义一个模块,参数介绍如下: define(自己模块名<可选>,依赖模块数组<可以为空>,function(依序的依赖模块declare){ 这里需要return一个dojo.declare对象 });、 定义一个模块,假定我们的文件名为 myModule.js define(["dependentModuleOne","dependentModuleTwo"],function(declareModuleOne,declareModuleTwo){ // 这里必须return一个JSON对象 var myModule = {}; myModule.hello = function(){ alert("hello"); }; return myModule; }); 使用一个模块 // require(["文件路径,不带扩展名","可以同时引入多个模块"],function(对前面引入模块的声明,要按照顺序){}) require([ "myModule" ],function(myDeclare){ myDeclare.hello(); }); dojo.declare() declare() 使用这个方法,可以声明一个Class,可以实现模块的继承和多继承,参数介绍如下: declare("namespace.ClassName?",[ inheritanceModelOne,inheritanceModelTwo ],{ } );
示例代码一,声明一个类 // Create a new class named "mynamespace.MyClass" declare("mynamespace.MyClass",null,{ // Custom properties and methods here }); // 使用这个类 var myClass = new mynamespace.MyClass();
示例代码二,匿名类 // Create a scoped,anonymous class var MyClass = declare(null,{ // Custom properties and methods here });
示例代码三,继承 这里先写基类: var MyClass = declare(null,{ // Custom properties and methods here }); // 然后派生类 var MySubClass = declare(MyClass,{ // MySubClass now has all of MyClass's properties and methods // These properties and methods override parent's });
示例代码四,多继承 var MyClass = declare(null,{ // Custom properties and methods here }); var OtherClass = declare(null,{ // Custom properties and methods here }); var ThatClass = declare(null,{ // Custom properties and methods here }); var MyMultiSubClass = declare([ MyClass,OtherClass,ThatClass ],{ // MyMultiSubClass now has all of the properties and methods from: // MyClass,and ThatClass });
define()和declare() 结合使用 define([ "dojo/_base/declare","dijit/form/Button" ],function(declare,Button){ return declare("mynamespace.Button",Button,{ label: "My Button",onClick: function(evt){ console.log("I was clicked!"); this.inherited(arguments); } }); });
require()
require也可以嵌套使用
require([ "myModule" ],function(myDeclare){ // 这里引入dojo的xmlHttpRequest模块 require(["dojo/_base/xhr"],function(xhr){ xhr.post(); }); // 这里调用我们自定义的模块 myDeclare.hello(); });
require是异步执行的,所以如果你这样写会报错的 var myVar; require([ "myModule" ],function(myDeclare){ myVar = new myDeclare(); }); myVar.hello();
因为,require是异步执行的,在执行到myVar.hello();这句时,myModule模块还可能正在被加载——是否加载完毕由你的模块缓冲状态决定
。
(Via @glue) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |