建立完全支援dojox.form.manager的自訂表格單控制項

來源:互聯網
上載者:User
本文翻譯自: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的控制項。因此,你需要以此為基類,比如:

dojo.declare("my.CustomFormWidget", dijit.form._FormWidget, {    /* implementation here */});

這裡簡單說明下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方法裡調用每個表單元素的這個方法。

好了,希望這些資訊能夠協助你去實現自己的表單元素控制項,好運!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.