解决Extjs中Combobox显示值和真实值赋值问题
用過Extjs的朋友相信都知道在Extjs的Combobox組件中是由兩個值來組成的。一個是displayField這個是用來顯示給我們看 的,而另一個是真正給系統(tǒng)用的valueField,舉個例子會更貼切一點。假如我們有一個下拉列表是公司選擇,那我們看到的option中的值應(yīng)該是公 司的名稱,而實際提交給系統(tǒng)的值可能是公司的ID或者編碼之類的。而Extjs中的combobox也是同樣的道理,但是它只提供了一個 setValue()函數(shù),我們在調(diào)用的時候發(fā)生的結(jié)果就是要么顯示的值和真實的值同是id,或者同是名稱。雖然同是id的時候系統(tǒng)可以正常運行,但這樣 用戶交互就顯示的友好了。相信大家都不明白你的1,2,3,代表首什么。
在網(wǎng)上查了一下,有的朋友說可以用setvalue()/setRawValue( Mixed value ) 來分別完成,事實上我試了一次并沒有成功。查了下API中的解釋。
setRawValue( Mixed value ) : Mixed 躍過驗證直接設(shè)置DOM元素值。需要驗證的設(shè)值方法可以查看setValu... 躍過驗證直接設(shè)置DOM元素值。需要驗證的設(shè)值方法可以查看setValue。Sets the underlying DOM field's value directly, bypassing validation. To set the value with validation see setValue.如果我沒有理解錯的話這里應(yīng)該是用于跳過驗證賦值的,也就是說你本來有些因為驗證不能通過的值可以通過這個函數(shù)來設(shè)置。(這里搞不懂為什么Ext官方會給這樣一個函數(shù),既然都是不能驗證的那干嘛還要賦值)。
在使用firebug分析生成的頁面的時候,發(fā)現(xiàn)真實的值是用一個隱藏的input來放置的。<input type=”hidden” id=”assistInfo.pid.id” name=”assistInfo.pid.id” value=”9″>既然這樣那我就用Ext.get()方法來試試,最終發(fā)現(xiàn)確實可以使用Ext.get()和form.getForm().findField()來分別賦值,考慮Ext.get()會造成新的內(nèi)存損耗,故使用Ext.fly()代替,最終代碼如下:
win.form.getForm().findField('assistInfo.pid.id').setValue(config.curr.node.text);Ext.fly('assistInfo.pid.id').dom.value=config.curr.node.id;2010-10-08 最新修改,以上這個方法還是有個問題。當(dāng)你的 cbx獲得焦點而又沒有修改的時候,在離開時會將你的displayField的值填充給valueField這樣的話同樣會造成系統(tǒng)錯誤。而較好的解決 辦法為:使用Ext.data.Record.create({})去構(gòu)建一個combobo的數(shù)據(jù)對象,并將這個值填充到combobo的 dataStore中,最后再調(diào)用setvalue這樣就可以完美地解決combobox初始值的問題了。
Ext.getCmp('userid').setRawValue(otherName); Ext.getCmp('userid').setValue(otherId); 這樣可以設(shè)置默認(rèn)的name 和id了總結(jié)
以上是生活随笔為你收集整理的解决Extjs中Combobox显示值和真实值赋值问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用ajax技术实现无闪烁定时刷新页面
- 下一篇: 工行幸福分期信用卡怎么用