圆圆的胖子 2009-07-30 15:07
浏览 259
已采纳

如何从 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条回答

  • johnlovely 2009-07-30 17:01
    关注

    你的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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 算法题:数的划分,用记忆化DFS做WA求调
  • ¥15 chatglm-6b应用到django项目中,模型加载失败
  • ¥15 武汉岩海低应变分析软件,导数据库里不显示波形图
  • ¥15 CreateBitmapFromWicBitmap内存释放问题。
  • ¥30 win c++ socket
  • ¥30 CanMv K210开发板实现功能
  • ¥15 C# datagridview 栏位进度
  • ¥15 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web
  • ¥15 kali环境运行volatility分析android内存文件,缺profile