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)

     

  • 相关阅读:
    【转】 java中Class对象详解和类名.class, class.forName(), getClass()区别
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    107. Binary Tree Level Order Traversal II
    109. Convert Sorted List to Binary Search Tree
    108. Convert Sorted Array to Binary Search Tree
    110. Balanced Binary Tree
    STL容器迭代器失效问题讨论
    113. Path Sum II
    112. Path Sum
  • 原文地址:https://www.cnblogs.com/nishilunhui/p/3081011.html
Copyright © 2011-2022 走看看