学无所长,一事无成
分类: JavaScript
2015-05-29 11:40:10
作者: | Peter Higgins, Bill Keese, Tobias Klipstein, Nikolai Onken, Craig Riecke, |
---|
Dijit 是位于 Dojo 之上的组件系统 。如果你没有任何 ,那 Dijit 正好可以作为学习开端。你可以用很少的代码 甚至没有,就可以构建令人惊叹的 Web 2.0 GUI,当然理解学习 JavaScript 的路程可不短(而且你还要深入学习 HTML 和 CSS)。
有两种方式使用 Dijit :在常规 HTML 标签上加上特定标签的声明式 declaratively ,或者通过 JavaScript 的编程式programmatically (你很快就会熟悉混合使用两种方式)。每一种方式设置的参数其实都一样。
注意: 访问 Dijit 使用函数 ... 这个同 是不同的,它完全是独立于 DomNodes 的。Dijit 会将所有 active widgets 储存在 中,用 id 作为唯一标识。 registry.byId() 根据传入的 ID 返回一个实例对象(即 widget),然后你就可以访问其内部的所有方法和属性了:
I've been replaced!
如果你需要引用对应 widget 的实实在在的 Node,那你可以使用 Dijit 属性: .domNode 。你可以通过此属性调整样式,位置,或进行 :
使用编程方式创建 widgets ,可以传入 id: ""参数:
否则,系统会自动为你创建一个唯一 ID:
Widgets 跟 DOM 节点一样包含很多属性。属性是程序操作 widget 的主要接口之一,(有两种接口形式,另外一种接口是事件句柄,如 onClick(0。)。
普通的属性在初始化时设置值,在 widget 创建后也可随意修改。而对于如 "id" 和 "type" 等属性,已被标注为 [const],就只能在初始化时设置。还有一些属性如 “focused”,标注为 [readonly] 只读,就不能修改。
This basically mirrors how vanilla HTML DOM nodes work, although the syntax is a bit different. Specifically, to get/set attributes after initialization, you need to use the get() and set() methods:
Set() 还有一种形式,类似 dojo/dom-style,可以传入 hash,便于一次设置多个属性:
属性值变化也可被监控。示例:
有一些属性是所有 Dijit 实例都具备的通用属性。
这些属性看起来很像是 widget 实例的成员函数,你可以通过前面讲的方法获取到一个 widget 的引用,然后通过引用就可以访问这些属性了。一些比较常用的属性如下:
用来处理 widgets 的另一类接口就是设置事件句柄 event handlers。例如:
事件句柄可以采用如上编程方式来设置,也可以直接声明,如下:
Dijit 有四种主题风格:Claro (Dojo 1.5+), Tundra, Soria, and Nihilo (all 1.0+)。 Themes are collections of images (icons and background images) and CSS, and bring a common visual style and color scheme to all the widgets. You can override the theme by container or by widget element to add nuance and flair.
To learn more about themes, see .
Everything in Dijit is designed to be globally accessible – to accommodate users with different languages and cultures as well as those with different abilities. Language translations, bi-directional text, and cultural representation of things like numbers and dates are all encapsulated within the widgets. Server interactions are done in a way that makes no assumptions about local conventions. All widgets are keyboard accessible and using the standard Dijit theme, usable in high-contrast mode as well as by screen readers. These features are baked in so that, as much as possible, all users are treated equally.
有很多种方式在页面中定位一个 widget ,然后通过其引用访问 widget。Widgets 就是对象 :包含一堆属性和 DomNode 引用。一旦你获取了一个 widget 的引用,你就可以使用其对象(或其成员属性)。有三种主要的方式访问一个 widget:
最简单的方式是通过 。一个 widget 创建出来,如果是使用了 Node 来创建的(比如使用了 srcNodeRef等),就有了一个 DOM 属性 id,这个 id 就会在 中注册成 widget 的 id。
先创建如下标签:
注意: it typically doesn’t take that many lines to use 使用 一般用不到上面那么代码,上例只是精心设计用来展示 widgets 和其 domNode 属性之间的关系。使用 byNode 的一个典型场景就是在 widget 代码的外部处理事件句柄:
一般来说,widgets 会创建他们自己的 DOM 结构。例如:
上述代码会创建一个新的 widget,随后可以利用 myButton.domNode 将其插入到文档中期望的位置。
采用声明式的语句如下:
注意在 dojo 扫描完节点属性并设置 innerHTML 后,原始的 button 节点已经被丢弃了。新的 DOM 节点自动替换掉了老的 button 节点。
可是,我们要知道还有另外一种类型的 widget 叫做 “behavioral widget”,这种 widget 只是修改原始节点(叫 srcNodeRef)而非取代它 。
要使用 behavioral widgets,你需要指定 source DOM node 供其操作。例如:
如果是通过标签页来进行初始化就比较自然。比如一个 behavioral widget 给 anchor 添加一个确认对话框,代码大致如下:
Dijit 没有提供任何 behavioral widgets, 这种设计主要是考虑便于纯粹通过编程方式来设置组件 (不需要开发者创建任何的 sourceDOM 节点框架)。但对于某些程序来说这还是很有用,也不用担心 Dijit 还是支持他的。