创建完全支持dojox.form.manager的自定义表单控件
本文翻译自: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:
问题原文是:
感谢提出这个问题,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的控件。因此,你需要以此为基类,比如:
你可以在API文档里找到这些相关信息,但是如果要详细深入了解的话,最好还是能够看一看它们的源代码以了解它们到底是如何工作的。
值得注意的是,这些基类提供了dojox.form.Manage要使用的一些API的默认实现,如果你要做一些特别处理的话,可以覆盖这些实现以适应实际的需求。
现在我们来看看哪些API会被dojox.form.Manager使用:
原文作者: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行为。
你可以在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)中实现。
- isValid方法:如果widget的值是valid则返回true,否则返回false。manager会去检查每一个表单元素的有效性作为自己的isValid的结果,比如当表单提交时就会调用此方法。
- validate方法: isValid仅仅返回widget是否是一个有效的状态,而validate会进行一些UI上的更新来反应当前的状态。通常,它会调用isValid方法,然后根据结果来更新状态。manager会在自己的validate方法里调用每个表单元素的这个方法。