如何从 form 取值以及如何取得 combo 组件的默认值

[img]/upload/attachment/130645/63768267-9151-3478-a812-c9aa725c3d2b.jpg[/img]
如上图是一个 combo 组件,定义如下
[code="java"]{
fieldLabel: '性质',
id: 'kind',
name: 'kind',
xtype: 'combo',
mode: 'local',
triggerAction: 'all',
store: new Ext.data.SimpleStore({
fields: ['kind'],
data: [['商业'], ['其他']]
}),
displayField: 'kind',
valueField: 'kind',
emptyText: '商业',
editable: false,
lazyInit: false,
typeAhead: true,
selectOnFocus: true,
valueNotFoundText: '商业',
value: proj.kind
}[/code]
当然,为了取值,我加了很多不必要的属性。
我需要在浏览器端把 formPanle 中的元素取出来,组织成一个 XML 字符串。使用如下代码:
[code="java"]for (var i = 0, fld; fld = fm.findField(i); i++) {
alert(fld.id+" = '"+document.getElementById(fld.id).value+"|"+fld.getValue()+"'");
}[/code]
我希望如果用户不操作上面那个 combo,就使用默认值“商业”,但是使用 EXT 的方法 fld.getValue() 得到的是空值,而 js 方法 document.getElementById(fld.id).value 能够得到默认值“商业”。
请问正确的设计应该如何获取?

BTW:

proj.kind 是返回的对象,可能为空,而我的要求就是为空的时候就取默认值。

另外,我还有一个 datefield 组件,定义如下:
[code="java"]{
id: 'INDATE',
name: 'INDATE',
xtype: 'datefield',
format: 'Y-m-d',
value: new Date()
}[/code]
我用 EXT 方法 fld.getValue() 得到的是 Thu Jul 30 2009 00:00:00 GMT+0800,而 js 方法得到的才是我想要的 2009-07-30
请知道如何做的朋友不吝指教,谢谢~!
[b]问题补充:[/b]
[quote]fld.getValue() == null ? "商业":fld.getValue()[/quote]
不行,因为必须要设计得具有通用性。在那个接口方法中必须要处理很多业务的 form,而且,还必须要多未来的业务响应。

暂时就用 js 方法了,有问题再来看。不过继续期待更好的解决方法
[b]问题补充:[/b]
感谢大家!都或多或少有帮助,虽然分少,但不知道如何让大家平分,就选一个吧。

昨晚仔细看了 api,最终的方法如下,希望对后来者有所帮助,如果大家还有更好的方法,可以直接站内联系我,谢谢。
[code="java"]fm.getForm().setValues(proj);

var flds = fm.getForm().getValues();
for (key in flds) {
alert(key + " = '" + flds[key] + "'");
}[/code]

4个回答

你的combo选项只有[['商业'], ['其他']],没有这2个选项对应的value吗?
我没怎么明白你想要做什么,你可以看一下我的combo的使用,希望对你有帮助
[code="java"]
var myCombo= new Ext.form.ComboBox({
store: [['','--Select--'],['1','Enable'],['0','Disable']],
hiddenName: 'status',
mode: 'local',
forceSelection: true,
editable: false,
triggerAction: 'all',
lazyInit: false,
lazyRender: true,
autoShow: true,
allowBlank: true,
fieldLabel: 'Status',
anchor: '90%'
});
var selectValue = myCombo.getValue();//得到当前选中选项对应的value
//例如:‘’,‘0’,‘1’
var rawValue = myCombo.getRawValue();//得到当前选中的字符串
//例如:'--Select--','Enable'
//想初始显示时让某个值被选中的话用如下方法
myCombo.setValue('1');//将使得'Enable'被选中
[/code]
另外,时间字段的取值用rawvalue
[code="java"]
{

id: 'INDATE',

name: 'INDATE',

xtype: 'datefield',

format: 'Y-m-d',

value: new Date()

}
var dateValue = Ext.getCmp('INDATE').getRawValue();
[/code]

fld.getValue() == null ? "商业":fld.getValue()

[quote]我用 EXT 方法 fld.getValue() 得到的是 Thu Jul 30 2009 00:00:00 GMT+0800,而 js 方法得到的才是我想要的 2009-07-30
请知道如何做的朋友不吝指教[/quote]

fld.getValue()得到的是Date类型的,

你要得到2009-07-30有两种方式:

  1. fld.getValue().format('Y-m-d') 2.fld.getRawValue()

默认值:

value: proj.kind || '一些默认值'

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!