快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

亚博电竞靠谱实力平台_酒文化网进入



Dijit 组件(widget)是 Dojo 供给的图形用户界面组件库。它供给了 Ajax 利用开拓中会用到的常用组件,可以赞助开拓亚博电竞靠谱实力平台职员快速的构建 Ajax 利用。本文并不会先容 Dojo 默认供给的组件,而是偏重于先容 Dijit 组件的编程模型和最佳实践,其目的是赞助开拓职员更好的开拓自己的 Dijit 组件。下面首先对 Dijit 做概要先容。

Dijit 概述

Dijit 组件的存在是 Dojo 框架差别于其它 JavaScript 框架的一个紧张特点。在桌面利用开拓中,开拓职员大年夜量应用图形用户界面组件库来前进开拓效率。而在 Web 利用开拓中,HTML 说话本身仅供给了少数基础的控件,如按钮、单选框、复选框、文本输入框和下拉列表等。而对付在 Web 利用开拓中常见的一些繁杂组件,如对话框、菜单、对象栏、进度条、富文本编辑器和树等,并没有供给原生的支持。在这种环境下,开拓职员每每必要自己开拓这样的繁杂组件,这就造成了更长的开拓周期和更高的开拓和掩护的资源。

Dojo 供给了一个种类多样的组件库。开拓职员只必要简单的定制就可以在自己的利用中应用这些组件。除此之外,Dojo 还供给了完善的组件编程模型。假如默认供给的组件都不能满意需求,可以自己来开拓所需的组件。遵照这个统一的编程模型,会比从头开初创建组件要轻易得多。有了组件的观点之后,开拓职员在设计 Web 利用的时刻,就可以从对照高的抽象层次来对利用的各个部分进行划分。定义好清晰的组件接口之后,团队成员就可以各司其职,并行开拓,从而前进开拓效率。

在开拓 Dijit 组件的时刻,必要留意下面几个基础的问题。

组件的粒度问题。一样平常来说,功能对照繁杂的组件晦气于复用,也晦气于团队开拓时的分工相助。然则过多小组件在页面上的时刻,会耗损对照多的系统资本,影响机能。而机能对 Web 利用来说是一个异常紧张的身分。是以必要进行必然的权衡。对照好的做法是从较大年夜的组件开始,当发明存在代码重复的时刻,再亚博电竞靠谱实力平台把重复的代码提掏出来,重构成新的组件。这样就把划分成小组件的决策推迟到了真正必要的时刻,避免过度设计。

组件的接口问题。组件的接口定义了代码中的其它部分若何应用该组件。一样平常来说,组件可以供给三类的接口:公共属性、公共措施和事故绑定点。公共属性指的是组件供给的可以公开造访的简单数据类型属性。一样平常在创建组件的时刻应用,用来对组件进行定制;公共措施指的是可以公开造访的 JavaScript 措施。一样平常在组件创建完成之后应用,用来改变组件的行径;事故绑定点是组件裸露出来的占位措施。一样平常由组件应用者经由过程 dojo.connect()来绑定到该措施上。组件应用该措施来看护应用者其内部状态的变更。这类措施一样平常以 on作为名称前缀。开拓职员应该根据必要定义相宜的接口,避免一些不好的实践。比如公共属性的值在组件创建之后,一样平常不保举应用者设置其值。假如设置该属性的值是一个合理的场景的话,最好供给响应的公共措施,并以文档的形式奉告应用者精确的用法。

组件之间的交互问题。组件之间假如必要互相通讯的话,最好应用组件的工具引用来完成。比如某个组件在创建别的一个组件的时刻,可以把自己的工具引用作为参数通报给其创建出来的组件。后者就可以应用此工具引用来调用前者的措施。别的一种做法是经由过程 dojo.publish()和 dojo.subscribe()措施来完成。这种做法的应用对照简单,可以避免层次较深的工具引用通报。不好的地方是组件之间的关联关系不敷清晰,也对照难掩护。保举的做法是优先应用第一种要领。

上面对开拓 Dijit 组件的一些通用问题进行了评论争论。下面开始先容 Dijit 组件的编程模型。在编程模型的先容历程中,会穿插先容相关的最佳实践。首先从 Dijit 组件的核心类 dijit._Widget开始。

dijit._Widget

dijit._Widget是所有 Dijit 组件的父类。Dijit 默认供给的组件以及自己开拓的组件都必要承袭自此类。dijit._Widget所供给的措施涉及组件的生命周期、属性设置和获取、事故处置惩罚和其它帮助功能等。深入懂得该类的这些措施的用法和实现细节,是开拓自己的 Dijit 组件的根基。下面分手对 dijit._Widget供给的措施进行分类评论争论。

组件生命周期

dijit._Widget供给了对组件生命周期的完备治理,包括组件的创建和销毁。Dijit 组件的生命周期治理在实现的时刻,应用了模板措施(Template Method)设计模式。dijit._Widget类的 create()措施定义了 Dijit 组件创建时的生命周期的默认模板。该措施会在相宜的机会调用模板中包孕的其它措施。这些不合的措施构成了组件生命周期中的各个阶段。开拓自己的组件的时刻,可以覆写此中的某些措施,从而在感兴趣的阶段添加自己的处置惩罚逻辑。开拓职员也可以覆写 create()措施来供给一套完全不合的生命周期实现。不过这种做法风险太大年夜,不建议应用。绝大年夜多半环境下,覆写默认模板供给的措施就足够了。dijit._Widget中定义的组件生命周期中的创建阶段如 图 1 所示。

图 1. Dijit 组件创建历程

如 图 1 所示,创建 Dijit 组件时的历程中包孕如下几个步骤:

以声明式或是编程式的要领创建 Dijit 组件。

创建时传入的参数被混入(mixin)到当前 Dijit 组件工具中。混入完成之后,postMixInProperties()措施被调用。

假如没有为此组件工具供给 ID 的话,则自动天生一个惟一的 ID。把此工具添加到全局的组件注册表中。完成之后,buildRendering()措施被调用。

设置 Dijit 组件的属性。完成之后,postCreate()措施被调用。

当组件被添加到页面上之后,显式调用 startup()措施。

组件创建完成之后,开始正常事情。

图 1 中给出了 4 个措施的名称,此中卵形中的 postMixInProperties()、buildRendering()和 postCreate()是 dijit._Widget供给的组件生命周期中的扩展点。自己开拓的组件应该经由过程覆写这些措施来实现自己的逻辑。圆角矩形中的 startup()措施并不是创建历程中的一部分,必要在 Dijit 组件创建完成之后显式的调用。下面对这 4 个措施进行具体的阐明。

postMixInProperties():在创建 Dijit 组件的时刻,可以经由过程参数来传入一个包孕各类属性的 JavaScript 工具。这些属性被混入到 Dijit 组件中,在代码中可以经由过程 this来引用。当混入完成之后,在创建组件的界面之前,可能还必要履行一些处置惩罚。这些处置惩罚的逻辑可以添加在 postMixInProperties()措施中。

buildRendering():该措施用来创建 Dijit 组件的用户界面,即 DOM 节点。该措施完成之后,Dijit 组件的 this.domNode指向的是创建完成的 DOM 节点。

postCreate():当 Dijit 组件的 DOM 节点创建完成之后,此措施被调用。必要留意的是,这个时刻组件的 DOM 节点可能还没有被添加到当前页面文档树中。

startup():当 Dijit 组件及其子组件被创建完成并添加到当前页面文档树中之后,显式的调用此措施。该措施对付那些包孕子组件的 Dijit 组件来说异常有用,可以用来节制子组件和进行结构。startup()措施只必要调用一次即可。调用完成之后,组件的属性 _started的值为 true,可以用来判断 startup()措施是否已经被调用过。

与创建 Dijit 组件对应的组件的销毁历程。销毁历程对照繁杂,涉及到 5 个措施,如 图 2 所示。图 2 中的箭头表示的是措施之间的调用关系。

图 2. Dijit 组件销毁历程

如 图 2 所示,最常用的销毁一个 Dijit 组件的措施是 destroyRecursive()。该措施用来销毁一个 Dijit 组件及其包孕的子组件。该措施会首先调用 destroyDescendants()措施来销毁子组件。因为子组件也可能包孕自己的子组件,destroyDescendants()也会调用 destroyRecursive()措施来删除其子组件,从而形成一个递归的销毁历程。当子组件销毁完成之后,destroyRecursive()会调用 destroy()措施来销毁自己。destroy()措施会首先调用 uninitialize(),接着履行内部的清理事情,着末调用 destroyRendering()措施来销毁组件的 DOM 节点。必要留意的是,destroy()措施会销毁在 Dijit 组件模板中定义的子 Dijit 组件。这 5 个措施中除了 uninitialize()之外的其它 4 个措施,都有一个参数 preserveDom用来注解是否保留 Dijit 组件的 DOM 节点,不过对从模板创建出的 Dijit 组件无效。

在深入理解了 Dijit 组件的生命周期之后,就可以更好的使用 Dijit 库供给的支持来开拓自己 Dijit 组件。下面先容一些与组件生命周期相关的最佳实践。

机动覆写 Dijit 组件生命周期相关的措施来添加自己的处置惩罚逻辑。一样平常来说,在 postCreate()措施中添加组件相关的处置惩罚逻辑即可。假如必要添加与 DOM 节点大年夜小和位置相关的逻辑,应该放在 startup()措施中,并要求组件的应用者显式调用。在覆写措施的时刻,要经由过程 this.inherited(arguments);来调用 dijit._Widget类的原始措施。

假如自己的 Dijit 组件在销毁的时刻必要履行额外的处置惩罚,应该把相关的逻辑添加在 uninitialize()措施中,并且只包孕当前组件相关的逻辑,不必要斟酌子组件。destroyRecursive()措施会认真处置惩罚子组件的销毁。

老是应用 destroyRecursive()来销毁一个 Dijit 组件。这样可以确保子组件老是被正常销毁,避免内存泄露。

只管即便不要覆写 destroyRecursive()、destroyDescendants()、destroy()和 destroyRendering()等 4 个措施。这 4 个措施封装了完备的 Dijit 组件销毁逻亚博电竞靠谱实力平台辑。一样平常来说,覆写 uniniti亚博电竞靠谱实力平台alize()措施就已经足够了。

属性获取与设置

Dijit 组件中可能包孕各类不合的属性,容许应用者对这些属性进行获取和设置。下面以一个显示电子邮件地址的 Dijit 组件来进行阐明。该组件应该容许应用者获取和设置显示的电子邮件地址。一样平常来说,必要供给 getEmail()和 setEmail(email)两个措施来实现。别的,为了防止裸露邮件地址,一样平常必要用特殊的字符调换掉落电子邮件地址中的“@”符号,如 admin@example.org被调换成 admin#example.org。这样的话就必要供给别的的两个措施。为了简化属性的获取和设置操作,dijit._Widget类中供给了 attr(name, value)措施来统一完成属性的获取和设置。当只传入一个参数的时刻,假如该参数是一个字符串,则表示获取属性亚博电竞靠谱实力平台的值;假如参数是一个 JavaScript 工具,则用该工具中的属性和值来设置组件的属性。当传入两个参数的时刻,两个参数分腕表示为属性的名称和要设置的值。对付示例 Dijit 组件来说,可以经由过程 attr("email", "alex@example.com")来设置要显示的电子邮件地址。

对付 Dijit 组件自定义的属性,默认环境下是维持在组件工具实例中的。attr()措施直接读取和设置组件工具中对应属性的值即可。除此之外,还可以经由过程 attributeMap来供给从属性到 DOM 节点之间的映射。即经由过程改变属性的值,就可以改动 DOM 节点。假如盼望在获取和设置属性的时刻添加额外的处置惩罚逻辑,则必要供给满意命名规范的对应措施。该命名规范是在首字母大年夜写的属性名称上添加特定的前缀和后缀。如对付属性 email来说,自定义的获取和设置属性的措施分手是 _getEmailAttr()和 _setEmailAttr()。自定义措施的优先级高于默认的措施。attr()会首先考试测验在 Dijit 组件工具中查找是否存在自定义的措施。代码清单 1 中给出了一个获取和设置属性的示例。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: