从零开始学_JavaScript_系列(21)——dojo(8)(手把手教你封装一个widget)

(73)封装一个widget

醒目:必须在web环境下使用,无论是pythonweb.py或者是通过http访问网站环境,都可以,但纯本地是不可行的。

 

首先,什么是widget?

简单来说,就是一个dom结点,比如像这样:

<div>这是一个dom结点
</div>

 

为什么需要widget呢?

很简单,比如,我们想在这样一个地方:

<div class="nodes"></div>

 

添加很多个上面那个dom结点,比如像这样。

<div class="nodes"><div>这是一个dom结点</div><div>这是一个dom结点</div>
</div>

 

或者在很多地方添加这一个dom结点。

 

解决办法①:

我们可以这么直接把他写在HTML里;

 

优点:

①复制粘贴到所有需要他的地方,非常简单

 

缺点:

①假如这个结点非常的复杂,可能还有一些事件(比如点击后弹一个弹窗什么的),我们要ctrl + c、ctrl + v很多次;

②假如产品经理突然说,让我们把这个改一下吧,因此我们可能需要在很多地方进行修改(但也有可能忘记把某个地方的改掉);

 

解决办法②:

封装一个widget

 

优点:

①上面的缺点都不是问题了;

 

缺点:

①假如这个结点很简单(比如就上面一行),那么这么写反而复杂了。

 

 

封装方法:

①基础是上面的类的继承,我们需要继承一个类,这个类就是widget的基础类;

类:"dijit/_WidgetBase"

 

②其次,我们需要一个模板类,这个模板做什么用的呢,很简单,是帮我们省去重复工作的,我们使用这个类,于是就可以省去重复写创建dom结点的工作了,只需要修改模板内的东西即可。

 

③为了说的更简单点,我给一个基础类声明,其创建方式是类的封装(具体见之前的71);

代码如下:

define(["dojo/_base/declare","dijit/_WidgetBase","dijit/_TemplatedMixin","dojo/text!template.html"], function (declare, _WidgetBase, _TemplatedMixin, template) {return declare('template', [_WidgetBase, _TemplatedMixin], {name: "这是一个模板的文件"//替换模板内的${name}位置baseClass: "templateClass"//模板的根div的css类templateString: template,   //这个template就是模板的内容,通常这么写就没错了postCreate: function () {   //渲染模板,还有给他加事件就放在这一步了this.inherited(arguments); }});
});

 

define引入的第一个插件是声明类;

第二个插件是widget;

第三个插件是模板类;

第四个是模板(指向一个html);

第五个是on,用于绑定触发事件的

 

同样,为了简单说明,有以下前提:

新建的文件和dojo文件夹、dijit文件夹等在同一个根目录下,包括:

《1》调用类的html文件;

《2》类的声明的js文件;

《3》类的模板文件;

 

④首先创建一个test.html文件,这个html文件是调用类的html文件;

我们还需要创建一个类文件test.js,这个js文件声明一个类;

我们最后创建一个模板文件template.html,这个文件作为模板;

 

⑤首先给出模板文件的html内容:

<div><div data-dojo-attach-point="node" class="node">${name}</div>
</div>

 

其中:

data-dojo-attach-point:可以通过这个属性找到该结点,可以理解为id一样的东西,同一个模板文件内不能重复;

class就是其类,就像正常的div的class属性一样;

${name}:在js文件里,可以通过某个变量来控制他,可以理解为,那个变量的值就是${name}显示的东西

 

⑥接下来给出js文件:

define(["dojo/_base/declare","dijit/_WidgetBase","dijit/_TemplatedMixin","dojo/text!template.html","dojo/on"], function (declare, _WidgetBase, _TemplatedMixin, template, on) {return declare('template', [_WidgetBase, _TemplatedMixin], {name: "这是一个模板的文件"//替换模板内的${name}位置baseClass: "templateClass"//模板的根div的css类templateString: template,   //这个template就是模板的内容,通常这么写就没错了postCreate: function () {   //渲染模板,还有给他加事件就放在这一步了this.inherited(arguments);this.aEvent();},aEvent: function () {var self = this;on(this.node, "click", function () {self.node.innerHTML += "<br>——添加了一些内容";})}});
});

 

我简单解释一下这个js文件:

《1》aEvent是这个widget绑定的一个方法,凡是使用这个widget的地方,都会自动绑定这个事件。之所以能自动绑定,是通过postCreate这个方法调用的原因。

 

《2》postCreate是创建widget必然会被执行的函数,不需要我们手动调用,这个函数是通过递归被执行的(总之知道他肯定会被执行就是了);

他是创建widget被执行的一系列的函数之一,准确的说是倒数第二个,倒数第一个是startup,一般是被手动调用的;

 

《3》这个widget展现出来的作用是。挂载某一个html的dom结点之上,然后点击文字部分的时候,会触发一个事件,而这个事件的效果是增加一行文字,文字内容就是innerHTML里面添加的内容。这个事件可以被无限次触发;

 

⑦最后给出test.html文件的内容:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8">
</head>
<script>var dojoConfig = {async: true}</script>
<script src="dojo/dojo.js"></script>
<script>require(["test"], function (test) {var te = new test({}, "base");})
</script>
<style>.node {border: 1px solid #ccc;}
</style>
<body>
<div id="base"></div>
</body>
</html>

 

我调用这个widget的方法很简单,require一个test(实际是test.js那个文件),然后在回调函数传参给他,然后new一个test(就是创建一个widget),但这个widget放在哪里呢?很简单,test的第二个参数就是widget被放置的地方(因为id="base"是相符的)。

 

 

最后:

因为某些人可能没法创建web环境,因此给一个示例地址:

http://www.jianwangsan.cn/test.html

ps:这是我的个人网站,理论上来说,应该是没有毒的吧。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转]面向对象(1、三大特征;2、六大原则)

目录 一、面向对象的概述&#xff1a; 二、封装&#xff1a; 1、封装概述 2、封装原则 3、封装好处 4、封装坏处 5、封装代码展示 三、继承&#xff1a; 1、概念&#xff1a; 2、实现格式&#xff1a; 3、特点&#xff1a; 4、好处&#xff1a; 5、弊端&#xff1…

Python的MySQLdb模块安装

在配置Django时&#xff0c;选择的是mysql数据库&#xff0c;要安装MySQLdb模块&#xff0c;不过安装过程中&#xff0c;遇到了很多errors&#xff0c;记录一下。 系统:ubuntu 11.10 mysql:直接apt-get安装的&#xff0c;version:5.1.62 到官方下载MySQL for Python 然后解压&a…

【测绘程序设计】C#将度分秒(° ‘ “)转换度(°)程序实现(附源码)

在实际工作中,无论是ArcGIS中,还是CASS中,作图时需要将GPS实测的经纬度度分秒( ’ ")坐标转换为度(),在前面的文章中介绍了Excel中将度分秒转为度的转换程序,本文讲解在Visual Studio中,采用C#语言实现快速度分秒( ’ ")转换度(),提高工作效率。 案例…

Spotlight监控工具使用

Spotlight on unix监控linux服务器 1.下载安装&#xff0c;工具包下载地址&#xff1a; 注&#xff1a;安装之后需要破解注册码 2.由于spotlight不能默认使用root用户登录&#xff0c;所以必须先创建一个具有root权限的用户 注&#xff1a;密码最好不要设置的过于简单化 [rootm…

Grpc MagicOnion库 之 客户端和服务端 (案例版)

之前通过自己写动态代理和用现成的动态代理库等实现过RPC功能&#xff0c;今天&#xff0c;就写一下如何直接引用GRPC的库来实现业务逻辑。gRPC的介绍&#xff0c;之前我也说了这个g的含义太多&#xff0c;也包含谷歌的意思了。可以看这个gRPC的文档介绍 : https://grpc.io/doc…

Windows11右下角出现评估副本水印如何去除?

Universal Watermark Disabler是一款十分好用的桌面工具&#xff0c;这款工具可以帮助用户轻松的去除Windows11 版本的操作系统右下角的水印。 使用方法 1、打开Universal Watermark Disabler软件&#xff0c;显示出当前系统的版本与水印状态。 2、Status中显示Ready for insta…

redhat配置centos的yum源

redhat默认不支持第三方的yum源&#xff0c;要求有rhn账号&#xff0c;下面就rhel5和rhel6改为centos源一、rhel5.5 X86_64更改为centos的yum源查看系统自带的yum相关的rpm包rpm -qa|grep yum删掉系统自带的yum相关的包rpm -e --nodeps yum-updatesd-0 rpm -e --nodeps yum-sec…

【GlobalMapper精品教程】001:GlobalMapper23+24 Pro-x64中文安装教程(附软件包下载)

Global Mapper 23是一款非常专业的地图绘制软件&#xff0c;功能非常的丰富&#xff0c;内置距离和面积计算&#xff0c;包括光栅混合、对比度调节、海拔高度查询、视线计算以及一些高级功能&#xff0c;可轻松实现图像校正、通过地表数据进行轮廓生成、通过地表数据观察分水岭…

JIL 编译与 AOT 编译

JIT&#xff1a;Just-in-time compilation&#xff0c;即时编译&#xff1b;AOT&#xff1a;Ahead-of-time compilation&#xff0c;事前编译。 JVM即时编译&#xff08;JIT&#xff09; 1. 动态编译与静态编译 动态编译&#xff08;dynamic compilation&#xff09;指的是“在…

中台基础指标列表

便于大家进行更方便的指标圈定&#xff0c;这里我将前面提到的通用指标进行一次拓展&#xff0c;为大家整理了一份完整的数据中台基础指标列表&#xff0c;方便大家在搭建指标体系时进行速查。 &#xff08;1&#xff09;App类产品分析指标 &#xff08;2&#xff09;网站类产…

期末作品检查

1、学期个人总结 在这个学期在杜老师的带领下学习了Python语言&#xff0c;这是一门相对于Java语言来说是比较简单的语言&#xff0c;用处也十分的广大。python是一种面向对象的解释型计算机程序设计语言&#xff0c;语法简洁清晰&#xff0c;目前已超越java成为最热门的编程语…

C# 通过不安全代码看内存加载

&#xff08;注&#xff1a;本篇用点长&#xff0c;有点绕&#xff0c;耐心浏览&#xff09;C#中类型分为值类型和引用类型&#xff0c;值类型存储在堆栈中&#xff0c;是栈结构&#xff0c;先进后出&#xff0c;引用类型存储在托管堆中。接下来用不安全代码的地址&#xff0c;…

ArcGIS实验教程——实验四十五:坐标直接转点、线、面案例教程(Create Features From Text File)

外业实测坐标(X、Y、Z)在ArcGIS中可以方便的生成点、点自动连成线、线转面。本实验讲解ArcGIS中从数据文件创建要素工具(Create Features From Text File)生成点、线、面。 文章目录 一、工具快速入门1. 工具添加2. 工具用法二、工具使用方法1. 创建点(Point)2. 创建多点…

湖北省软件行业协会会员单位全名录(2014年的信息)

理事长单位 1.烽火通信科技股份有限公司 副理事长单位&#xff08;排名不分先后&#xff09; 2.武汉大学计算机学院 3.武汉天喻信息产业股份有限公司 4.武汉开目信息技术有限责任公司 5.武汉钢铁工程技术集团自动化有限责任公司 6.武汉菲旺软件技术有限责任公司 7.立得空间信息…

静态html引入js添加随机数后缀防止缓存

在web项目开发中&#xff0c;页面引入js被修改时&#xff0c;为避免浏览器缓存引起的问题&#xff0c;在引入js时&#xff0c;给js名后面加上随机数&#xff0c;以保证每次都发送新的请求。 在jsp中&#xff0c;一般通过后台取随机数即可&#xff0c;代码如下: <script src&…

[转]SDK与API区别

转载&#xff1a;https://www.zhihu.com/question/21691705/answer/149935191 SDK&#xff08;software development kit&#xff09;&#xff0c;中文可译为“软件开发工具包”。 一般都是一些被软件工程师用于为特定的软件包、软件架构、硬件平台、操作系统等建立应用软件的开…

详谈如何定制自己的博客园皮肤【转】

转自&#xff1a;http://www.cnblogs.com/jingmoxukong/p/7826982.html 目录 前言Quickstart定制博客园 CSS 的原理页面定制CSS代码博客侧边栏公告页首Html代码页脚Html代码定制细节独立控件小老鼠游戏动画动画时钟百度分享栏Github 角标签云背景动画动态标题文章内容样式定制带…

【ArcGIS微课1000例】0025:ArcGIS Online当前未连接到在线资源终极解决办法

ArcGIS Online在线资源列表: World Imagery: 底图服务: 中国地图彩色版: 打开ArcGIS时,系统托盘提示“ArcGIS Online当前未连接到在线资源”,如下图所示,如果无法连接到ArcGIS Online,则就无法添加在线资源,如World Imagery等。 关于该问题,网上有多种解决办法,然而…

学习.NET ,提升.NET技能,这些公众号得关注

时逢七月&#xff0c;白云在天&#xff0c;绿水环山&#xff0c;甚是悠闲。可是&#xff0c;学路上的我们却四处彷徨。学海无涯&#xff0c;我仍苦寻渡口&#xff1b;学路漫漫&#xff0c;我却愁无舟楫。我不禁四下扫视&#xff0c;自语问天&#xff0c;学须有成&#xff0c;可…

Excel表格从指定部分重新分页打印的两种方法

Excel表格现在已经成为了一个极其重要的办公工具&#xff0c;尤其是在数据处理方面&#xff0c;它可以进行各种数据的处理、统计分析和辅助决策操作&#xff0c;但是在日常工作中我们经常对一些功能无从下手&#xff0c;例如在进行表格内容打印时&#xff0c;需要将其中内容从某…