(2)Dojo学习之模块化

article/2025/9/13 5:32:09

  • 引言
  • Dojo之模块化
    • 1定义模块
    • 2调用模块
    • 3解释dojoConfig的全局变量
  • 总结
    • 1本篇博客代码下载地址Dojo模块化

1.引言

      在本篇博客中主要讲解一下如何在dojo中使用模块,如何自定义自己的模块等等,在使用dojo编程的时候,大家一定要转变自己的思想,一定要用面向对象的思想去思考问题。大家如果学过后台语言,那么就应该知道:一个可执行程序肯定只有一个入口。就好比Java中的main函数一样,那么对应到dojo中应该如何去理解呢?大家可以将require函数当作程序的入口,然后我们去定义一系列的模块.所以的模块在require函数中进行整合。可能这样说大家并不是很了解,接下来我们就以实例来说明一下。

2.Dojo之模块化

      在AMD规范中使用define方法去定义模块,我们先来看一下define的简单使用:

define([],function(){});
  • define函数有2个参数,第一个参数是该模块所依赖的其他模块(可选,可以不写),第二个参数回调函数(也是可选的,也可以不写),加载依赖模块成功之后的回调。接下来我们定义一些简单的模块

2.1定义模块

  • 如果一个模块仅含值对,没有任何依赖(moudle1.js)
define({color: "black",size: "unisize"
});
  • 如果模块没有任何依赖,但是需要一个做准备活动的函数(moudle2.js)
define(function () {//在这里可以一些准备工作return {color: "black",size: "unisize"}//return 是模块的返回值
});
  • 如果模块存在依赖,假设模块依赖需要用到dojo/dom模块(moudle3.js)
//该模块提供了一个方法,可以改变dom元素的innerHTML
define(["dojo/dom"], function(dom) {return {change: function(id,text) {dom.byId(id).innerHTML=text}}}
);
  • 将模块定义为函数(moudle4.js)
define(function() {return function(text) {//弹出一下text文本alert(text);}}
);

2.2调用模块

      在前面我们定义了四个模块,那么我们在我们的程序中应该如何引用呢?如何让dojo去找到我们的js文件呢?首先我们先看一下我们的项目路径:

jsmoudle1.jsmoudel2.jsmoudel3.jsmoudle4.js
index.html

我们将js文件夹看成一个模块,那么我们应该告诉dojo框架我们的js文件在什么位置,在上一篇博客中我们知道可以通过dojoConfig去添加我们自己的配置,告诉dojo框架自定义模块所处的位置用的是packages属性,如下面所示:

<script>var dojoConfig={packages: [{name: "js",//模块的名字location: location.pathname.replace(/\/[^/]*$/, '') + '/js'//模块所处的路径}]}</script>

添加好了配置,我们如何在require引用我们的模块呢?下面的代码便是引用我们的模块,首先设置一个div(用于模块三)

<div id="test1"></div>
require(["js/moudle1","js/moudle2","js/moudle3","js/moudle4"], function(moudle1,moudle2,moudle3,moudle4) {alert(moudle1.color)alert(moudle2.color)moudle3.change("test1","文本改变了moudle3")moudle4("aaaa")});

2.3解释dojoConfig的全局变量

      在上一篇博客中我们说,如果在dojoConfig设置一些我们自定义的属性,那么该属性便是全局的,在整个项目中都可以使用,现在我们来看一看,这句话应该如何理解。
      假设我们有一个属性叫做projectName,其中记录的是项目的名字。该名字可能在项目任何地方使用。那么我们应该如何做呢?代码如下

var dojoConfig={packages: [{name: "js2",location: location.pathname.replace(/\/[^/]*$/, '') + '/js2'}],projectName:"test"}
  • 我们定义了两个模块moudle1,首先修改了模块的名称,然后返回最初模块的名称
define(["dojo/_base/config"], function(config) {return {getName: function() {var name=config["projectName"]config["projectName"]="修改了test";return  name;}}}
);
  • moudle2只返回了当前模块的名称
define(["dojo/_base/config"], function(config) {return {getName: function() {return  config["projectName"];}}}
);
  • 主页面
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Title</title><link  rel="stylesheet"  type="text/css" href="http://localhost/arcgis_js_api/library/3.17/3.17/dijit/themes/tundra/tundra.css"/><link  rel="stylesheet"  type="text/css" href="http://localhost/arcgis_js_api/library/3.17/3.17/esri/css/esri.css" /><script>var dojoConfig={packages: [{name: "js2",location: location.pathname.replace(/\/[^/]*$/, '') + '/js2'}],projectName:"test"}</script><script  type="text/Javascript" src="http://localhost/arcgis_js_api/library/3.17/3.17/init.js"></script><script>require(["js2/moudle1","js2/moudle2"], function(moudle1, moudle2) {alert(moudle1.getName())alert(moudle2.getName())});</script>
</head>
<body class="tundra">
</body>
</html>
  • 运行结果

这里写图片描述

这里写图片描述

首先弹出test,然后弹出修改了test,因此大家理解刚刚说的那句话了吗?我们可以通过设置dojoConfig设置全局属性。

3.总结

      在上面的例子中,我们讲解了如何去定义模块,以及如何去调用模块,不知道大家注意到了没有,在整个程序中我只用了一次require函数,但是用了很多次define函数,也就是说我们定义了很多个模块,但是函数的入口却只有一个。我们从另外一个角度来看。模块的使用非常类似与面向对象中的类中的静态方法。在dojo中,还提供给我们一个模块叫做dojo/_base/declare,我们可以利用此模块定义类,关于此模块的使用,主要在下一篇博客中介绍。

3.1本篇博客代码下载地址:Dojo模块化


http://chatgpt.dhexx.cn/article/vQyBGp3K.shtml

相关文章

Dojo 1.6 官方教程: 创建自定义Dojo小部件(Widget)

在这个教程中&#xff0c;我们将会演示如何利用Dojo 和Dijit框架来创建自定义的小部件。 主要会使用到dijit._Widget 和dijit._Templated 基类和mixin。 对dijit框架的基础知识&#xff0c;可以参看前两篇教程 难度&#xff1a;中等 适用Dojo版本&#xff1a; 1.6 作者&#xf…

(3)Dojo学习之Class

引言dojo中的类 1创建一个简单的类2类和模块结合使用3关于类的继承 需求 1需求一2需求二很重要21代码实现22程序出错23程序运行3 需求三 再次介绍require加载模块总结 1本博客代码的下载地址dojo_class 1.引言 说到面向对象&#xff0c;我们就不得不提一下类&#xff0c;在原生…

探索dojo/json

难度&#xff1a;中等 Dojo版本&#xff1a;1.7 原作者&#xff1a;Kris Zyp 译者&#xff1a;Oliver (zhuxw1984gmail.com) 原文链接&#xff1a;http://www.sitepen.com/blog/2012/09/21/exploring-dojojson/ &#xff08;年初翻译过Kris Zyp的另一篇介绍dojo/json的文章&…

dojo是什么?

现在Web端vue、React、Angular大行其道&#xff0c;安卓端js也有React Native等&#xff0c;那么学习dojo有什么意义呢&#xff1f; 有些老的项目还是用的dojo。。。。例如arcgis javascript api等等 https://dojotoolkit.org/documentation/tutorials/1.10/hello_dojo/ 为什…

Dojo入门篇

Dojo是一个JavaScript实现的开源DHTML工具包&#xff0c;Dojo最初的目标是解决开发HTML应用程序中遇到的一些长期存在的问题&#xff0c;然而现在Dojo已经成为了开发RIA应用程序的利器。 Dojo让Web页面具有动态能力&#xff0c;我们可以在其他支持JavaScript的环境中使用Dojo。…

dojo中的类

使用arcgis api for js 4.*进行地图的web前端开发&#xff0c;就不得不与dojo打交道。dojo是一个框架&#xff0c;自成体系&#xff0c;比如它对类的支持&#xff0c;有自己的一套。众所周知&#xff0c;js不是面向对象语言&#xff0c;没有类这一说&#xff0c;都是用函数来模…

dojo学习教程

Dojo 作为最著名的 Ajax 开源项目之一&#xff0c;不仅让 Web 程序员可以免费获得和使用其框架进行 Web 应用的开发&#xff0c;更吸引了大量的开发者对其不断的扩充&#xff0c;开发新的组件。DojoX 就是在这样的开发社区中产生的。DojoX 是一组基于 dojo 的开源项目的集合&am…

Dojo与jQuery综合比较分析

最近Dojo和jQuery双双发布了最新的1.8版本,有着相同版本号的两个Javascript库也有许多核心的相同之处:相同的资源加载机制AMD、相同的选择器 引擎Sizzle等。作为业界知名的Javascript库,Dojo和jQuery在各自领域有着为数众多的拥护者。不过正所谓一把钥匙开一把锁,对一个项目…

Dojo简述

Dojo是一个JavaScript实现的开源DHTML工具包。Dojo的最初目标是解决开发DHTML应用程序时遇到的一些长期存在的历史问题。 【注&#xff1a;DHTML是一种使HTML页面具有动态特性的艺术。DHTML是一种创建动态和交互WEB站点的技术集合。对大多数人来说&#xff0c;DHTML意味着HTML…

ibatis简介

背景 介绍ibatis实现之前&#xff0c;先来看一段jdbc代码: Class.forName("com.mysql.jdbc.Driver"); String url "jdbc:mysql://localhost:3306/learnworld"; Connection con DriverManager.getConnection(url, "root","learnwo…

Ibatis使用

部分参考&#xff1a;https://blog.csdn.net/shixiaoguo90/article/details/49949445 Apache iBatis是当前IT项目中使用很广泛的一个半自动ORM框架&#xff0c;区别于Hibernate之类的全自动框架&#xff0c;iBatis对数据库的操作拥有更加灵活的控制&#xff0c;对于那些经常需…

iBatis-iBatis配置环境(eclipse+mysql)

在使用JAVA框架前要配置其环境&#xff0c;比如使用Hibernate、Struts等都需要对其环境进行配置&#xff0c;当然使用iBatis开发之前&#xff0c;也需要配置iBatis环境。 一、iBatis环境的配置只需三步 1.引入jar包 2.配置sqlMapConfig.xml文件 3.配置SqlMap.xml文件 二、概览i…

什么是IBatis

什么是IBatis 我一直想写一篇关于持久化数据访问的文章&#xff0c;可是我不知道怎么开始介绍&#xff0c;前两天晚上睡觉的时候突然有了一些开始写的想法&#xff0c;所以我决定今天动手开始写一点东西。头一次写这样的文章&#xff0c;希望大家不要见怪。 现在网上很多人学习…

ibatis-Spring 整合

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的&#xff0c;但程序一旦跑起来了&#xff0c;突然有一种豁然开朗&#xff0c;重见天日&#xff0c;感觉生活很美好的感觉&#xff01;&#xff0c;也许&#xff0c;这就是那一行行的代码带给我们的不同享受…

ibatis与spring整合

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的&#xff0c;但程序一旦跑起来了&#xff0c;突然有一种豁然开朗&#xff0c;重见天日&#xff0c;感觉生活很美好的感觉&#xff01;&#xff0c;也许&#xff0c;这就是那一行行的代码带给我们的不同享受…

iBatis--iBatis 是什么?

一.为啥使用iBatis&#xff1f; 在 Hibernate、JPA 这样的一站式对象 / 关系映射&#xff08;O/R Mapping&#xff09;解决方案盛行之前&#xff0c;iBaits 基本是持久层框架的不二选择。即使在持久层框架层出不穷的今天&#xff0c;iBatis 凭借着易学易用、轻巧灵活等特点&am…

iBatis-iBatis基本操作(增删改查)

在上一篇iBatis博客中已介绍了如何配置iBatis环境&#xff0c;这篇博客主要进行介绍一些iBatis的基本操作实现。iBatis的增删改操作都需要操作SqlMap,DAO层Manger,POJO 这几个类来实现。下面分别介绍一下iBatis基本操作的实现: 一.iBatis的添加数据方式 这里介绍两种iBatis添加…

Ibatis与Mybatis的区别—侧重于Ibatis

目录 一、什么是Ibatis&#xff1f; 1、iBatis是一款轻量级的持久化框架 2、iBatis最大的特点是将SQL语句与Java代码分离 3、iBatis具有以下几个关键组成部分&#xff1a; 二、Ibatis与Mybatis的区别 1、基本信息不同 2、开发时间不同 3、配置方法不同 三、Ibatis与My…

ibatis使用方法

转载。怕原地址丢失&#xff0c;备份。。 http://lyb520320.iteye.com/blog/586628 http://lyb520320.iteye.com/blog/586800 iBATIS3.0学习&#xff08;一&#xff09;使用iBATIS3.0完成增删改查 博客分类&#xff1a; iBATIS3 iBATIS Apache Spring SQL JDBC 使用iBATIS3.0完…

IBatis使用浅析

ibatis 历史 Eight years ago in 2002, I created the iBATIS Data Mapper and introduced SQL Mapping as an approach to persistence layer development. Shortly thereafter, I donated the iBATIS name and code to the Apache Software Foundation. The ASF has been th…