本文翻译自:http://www.sitepen.com/blog/2011/10/14/creating-a-widget-with-full-dojox-form-manager-support/
原文作者:Ken Franqueiro
译者:Nate(supnate@gmail.com)
作为免费Dojo支持工作的一部分,我们收到来自Pong的这样的问题:如何让自定义控件能够支持dojox.form.manager:
问题原文是:
”我想创建一个自定义的表单控件,它组合了dijit.form.Select和dijit.form.ValidationTextBox,因为这并不是一个标准的dijit表单元素,因此它不能使用dojox.form.manager的一些功能,比如disable(), setFormValues(), observer等等。因此我想知道如何才能让自定义表单控件去支持dojox.form.manager呢?“
感谢提出这个问题,Pong!在分析这个问题之前,我们注意到你对你的widget的描述-”一个dijit.form.Select和dijit.form.ValidationTextBox的组合“-听上去这很像dijit.form.FilteringSelect已经做了这件事情。并且dijit.form.FilteringSelect已经能很好的支持dojox.form.Manager。如果你没有试过这个控件也许可以去看看。你可以通过这个链接来看到相关的例子:this trivial dojox.form.Manager example.
好了,既然你已经创建了自定义控件,那么我们来看看dojox.form.Manager需要控件提供哪些东西才能去管理它们。
首先最重要的是,dojox.form.Manager仅仅跟踪管理那些继承自dijit.form._FormWidget的控件。因此,你需要以此为基类,比如:
这里简单说明下dijit.form._FormWidget,它主要用于封装Html的input元素,使其成为一个dijit的表单元素。特别重要的一点是对focusNode的设置,通常指向实际的input节点,从而能够使用原生的focus行为。
对于dijit.form._FormWidget还有一个进一步的扩展是dijit.form._FormValueWidget,它提供了表单元素的一些额外的基本功能,用于设置和获取表单元素的值,比如dijit.form.Select和dijit.form.FilteringSelect都继承自这个类。
你可以在
API文档里找到这些相关信息,但是如果要详细深入了解的话,最好还是能够看一看它们的源代码以了解它们到底是如何工作的。
值得注意的是,这些基类提供了dojox.form.Manage要使用的一些API的默认实现,如果你要做一些特别处理的话,可以覆盖这些实现以适应实际的需求。
现在我们来看看哪些API会被dojox.form.Manager使用:
- onChange: 这是manager用于观察的事件。(在_FormWidget中实现)
- disabled getter/setter: manager用其来enable/disable表单元素,这个disabled状态在验证表单时也会被使用,因为disabled元素是不会被提交的(在_FormWdiget中实现)。
- value getter/setter: manager用其获取和设置表单元素的值。(在_FormWidget中实现)
- reset:重置表单元素的值(在_FormValueWidget)中实现。
下面两个验证方法也会被manager使用,但是这两个方法并没有被_FormWidget基类所实现,需要自己去实现。dijit.form.ValidationTextBox(被dijit.form.FilteringSelect继承)包含了这个实现,可以参考其方法来为自己的widget提供这样的API。
- isValid方法:如果widget的值是valid则返回true,否则返回false。manager会去检查每一个表单元素的有效性作为自己的isValid的结果,比如当表单提交时就会调用此方法。
- validate方法: isValid仅仅返回widget是否是一个有效的状态,而validate会进行一些UI上的更新来反应当前的状态。通常,它会调用isValid方法,然后根据结果来更新状态。manager会在自己的validate方法里调用每个表单元素的这个方法。
好了,希望这些信息能够帮助你去实现自己的表单元素控件,好运!
分享到:
相关推荐
标题中的“多文件上传 dojo组件 dojox.form.FileUploader”是指使用Dojo JavaScript库中的dojox.form.FileUploader组件来实现网页上的多文件上传功能。Dojo是一个强大的JavaScript框架,它提供了丰富的UI组件和工具...
虽然dojox.charting.Chart2D可以方便地创建条形图,但直接使用dojox.gfx的优势在于可以自定义程度更高,对于复杂的甘特图需求,如特定的样式、交互或动画效果,dojox.gfx提供的底层绘图能力更加灵活。 在CSDN上提供...
Uploader(dojox.form.Uploader),它具有一个可定制样式的fileinput按钮,可使用多文件选择模式,且完全基于HTML元素。在不支持HTML5的浏览器中,该控件可以自动切换到使用Flash或者iframe。Fileinput之所以叫...
Dojo Toolkit是JavaScript的一个强大的、模块化的开发框架,其中的dojox.gfx库为浏览器端的2D图形提供了抽象层,支持多种渲染后端,如SVG、VML、Canvas和Silverlight。 这个开源项目“SVG to dojox.gfx Convertor”...
DojoX包含了如dojox.charting用于绘制统计图表,dojox.collections提供集合数据结构,dojox.encoding实现了加密功能,dojox.math包含数学函数,dojox.reflect提供反射功能,dojox.storage支持本地数据存储,dojox....
- dijit.forms:表单控件相关的Widget库。 - dijit.layout:页面布局Widget库。 - dijit.popup:以弹出窗口方式使用Widget的包。 - dojox.charting:绘制统计图表的工具包。 - dojox.collections:提供了实用的...
通过 JavaScript 创建一个 FormData 对象,并将需要上传的表单元素作为参数传递给 FormData 的构造函数,这样就可以将表单内的数据组织成适合传输的格式。对于文件上传,需要在表单中包含一个类型为 file 的 input ...
此外,Widget还支持自定义样式表和事件处理。 #### 常用包介绍 Dojo 1.1.1版本提供了丰富的包资源,分为三个主要命名空间:Dojo、Dijit和DojoX。Dojo是核心功能包,Dijit包含所有Widget组件,而DojoX则用于实验性...
4. **可扩展性和灵活性**:开发者可以根据需要自定义组件或者创建新的组件,极大地提高了开发效率。 5. **社区支持**:由于Dojo是一个开源项目,因此有着活跃的社区支持,为开发者提供了丰富的资源和技术支持。 ###...
- **dojox.storage**:支持将数据保存在本地存储中,例如通过浏览器的 Flash 实现。 - **dojox.xml**:XML 解析工具包。 #### djConfig 全局配置 `djConfig` 是 Dojo 内置的一个全局设置对象,通过它可以控制 Dojo...
这个组件兼容dojo.data和dojox.data接口,能够与各种类型的数据集格式无缝集成,包括ItemFileWriteStore、JsonRestStore等。这使得开发人员可以方便地在Web应用中实现数据的分页展示,无需担心底层数据存储的具体...
- **dojox.encoding**:加密功能API,支持Blowfish、MD5、Rijndael、SHA等加密算法。 - **dojox.math**:数学函数库。 - **dojo.reflect**:提供反射功能的函数库。 - **dojox.storage**:用于将数据保存在本地存储...
- **dojox.encoding**:加密API,支持Blowfish、MD5等算法。 - **dojox.math**:数学计算库。 - **dojo.reflect**:反射功能库。 - **dojox.storage**:本地数据存储API。 - **dojox.xml**:XML解析工具包。...
在Dojo框架中,`dojox.grid.Grid`是一个强大的数据网格组件,用于展示和操作表格数据。在提供的代码段中,尝试引用并使用这个组件来创建一个包含多个列的数据表格。然而,出现了一个404错误,表示浏览器无法找到`...
DOJO的Widget遵循MVC模式设计,支持自定义样式表及事件处理。 #### 二、常用包介绍 DOJO1.1.1版本中提供了大量的包,这些包主要分布在三个一级命名空间中:Dojo、Dijit和DojoX。其中: - **Dojo**:包含了核心功能...
3. **数据绑定和模板**:Dojo提供了dijit.form组件和dojox.data服务,用于实现视图和模型之间的数据绑定。同时,它还支持 declarative programming,通过标记语言如Dojo Enhanced Grid和Dojo Templating进行界面设计...
最接近的模拟是 dojox.image.Gallery (dojox.image.ThumbnailPicker+dojox.image.SlideShow),但是 kGallery 不需要下载几十个带有 dojo 库代码的 JavaScript 文件。 kGallery 包含 kSlideshow 和 kThumbnailPicker...
- **具体步骤**:从创建数据模型开始,然后使用Dojo.Data API加载数据,接着配置dojox.grid以展示数据,并添加交互功能以便用户能够添加、删除和修改列表项。 #### 结论 《Master Dojo》是一本非常有价值的参考书...