zoukankan      html  css  js  c++  java
  • 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 ], { } );

    • "namespace.ClassName? " :可选,不写则为匿名,dojo会自动分配一个名称;
    • [ one, two ] : 这里是继承的对象,数组类型,可继承多个;
    • { } : 使用 JSON 来描述你的属性和方法;

    示例代码一,声明一个类

    // 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, OtherClass, 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)

     

  • 相关阅读:
    MySql基础教程(三)——查询训练
    MySql基础教程(二)
    MySql基础教程(一)
    解决Eclipse闪退问题的方法总结
    MySQL图形工具 MySQL GUI Tools的安装使用方法
    MySql5.6版修改用户登录密码
    Windows下MySQL解压版的配置
    js 数组容易弄混的那些方法
    如何使CSS--better(系列二)
    如何使CSS--better(系列一)
  • 原文地址:https://www.cnblogs.com/nishilunhui/p/3081011.html
Copyright © 2011-2022 走看看