extjs求教,使用rowEditing时combo的赋值问题

fff-cai 2015-07-21 04:22:08
首先是grid的显示

进行编辑后


这是举办方列的js代码,绑定的是一个对象

问题就是怎么对编辑时的combo进行赋值,让它能正常显示文本。还有后面的时间控件也是这个问题,时间控件绑定的值都是Date(1438272000000)这样的文本
...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Go 旅城通票 2015-07-22
  • 打赏
  • 举报
回复
引用 3 楼 seed629869600 的回复:
[quote=引用 2 楼 showbo 的回复:] 你的Partner那个键值最好改为普通类型,不要为对象,要不editor是直接使用那个键的值的,不会取子键值,就是你配置的renderer。 当然你不嫌麻烦,可以配置rowEditing的相关事件来自己更新记录
    var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
        clicksToMoveEditor: 2,
        autoCancel: false, listeners: { beforeedit: function (editor, e, eOpts) { 
            setTimeout(function () {
                var x =document.getElementById('xxxx');
                x.value = e.record.get('Partner').NAME;
            }, 100)
        }, edit: function (editor, e, eOpts) {
            var x = document.getElementById('xxxx'); 
            e.record.set('Partner', { NAME: x.value });
            e.record.commit();
        }
        }
    });
{ header: '举办方', dataIndex: 'Partner', editor: { allowBlank: false, inputId: 'xxxx' } } startdt的内容要改为时间对象,而不是字符串。如 "startdt":"Date(1438272000000)",你要改成"startdt":new Date(1438272000000),这样startdt才是时间,而不是字符串。要不直接显示你的startdt内容,因为不是时间对象,虽然你那列添加了renderer进行格式化
多谢,我之前也试过在beforeedit直接设置编辑框的值,但是无效,现在加了延时后就行了,想来是beforeedit后还有事件对编辑框进行了赋值。
var rowEditing = new Ext.grid.plugin.RowEditing({
            clicksToEdit: 2,
            saveBtnText: '保存',
            cancelBtnText: "取消",
            autoCancel: false,
            listeners: {
                beforeedit: function (editor, e, eOpts) {
                    setTimeout(function () {
                        Ext.getCmp("editPartner").setValue(e.record.get('Partner').ID);
                        Ext.getCmp("editBEGINTIME").setValue(eval('new ' + (e.record.get('BEGINTIME').replace(/\//g, ''))));
                        Ext.getCmp("editENDTIME").setValue(eval('new ' + (e.record.get('ENDTIME').replace(/\//g, ''))));
                    }, 100);
                },
                edit: function (editor, e, eOpts) {
                    var name = "";
                    for (var i = 0; i < pjson.length; i++) {
                        if (Ext.getCmp("editPartner").getValue() == pjson[i]["ID"]) {
                            name = pjson[i]["NAME"];
                            break;
                        }
                    }
                    e.record.set('Partner', { ID: Ext.getCmp("editPartner").getValue(),NAME:name });
                    e.record.commit();                    
                }
            }
        });
[/quote] ext没有输入控件生成完毕后的事件,所以需要延时执行下才能获取到到render后的输入控件
fff-cai 2015-07-22
  • 打赏
  • 举报
回复
引用 2 楼 showbo 的回复:
你的Partner那个键值最好改为普通类型,不要为对象,要不editor是直接使用那个键的值的,不会取子键值,就是你配置的renderer。 当然你不嫌麻烦,可以配置rowEditing的相关事件来自己更新记录
    var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
        clicksToMoveEditor: 2,
        autoCancel: false, listeners: { beforeedit: function (editor, e, eOpts) { 
            setTimeout(function () {
                var x =document.getElementById('xxxx');
                x.value = e.record.get('Partner').NAME;
            }, 100)
        }, edit: function (editor, e, eOpts) {
            var x = document.getElementById('xxxx'); 
            e.record.set('Partner', { NAME: x.value });
            e.record.commit();
        }
        }
    });
{ header: '举办方', dataIndex: 'Partner', editor: { allowBlank: false, inputId: 'xxxx' } } startdt的内容要改为时间对象,而不是字符串。如 "startdt":"Date(1438272000000)",你要改成"startdt":new Date(1438272000000),这样startdt才是时间,而不是字符串。要不直接显示你的startdt内容,因为不是时间对象,虽然你那列添加了renderer进行格式化
多谢,我之前也试过在beforeedit直接设置编辑框的值,但是无效,现在加了延时后就行了,想来是beforeedit后还有事件对编辑框进行了赋值。
var rowEditing = new Ext.grid.plugin.RowEditing({
            clicksToEdit: 2,
            saveBtnText: '保存',
            cancelBtnText: "取消",
            autoCancel: false,
            listeners: {
                beforeedit: function (editor, e, eOpts) {
                    setTimeout(function () {
                        Ext.getCmp("editPartner").setValue(e.record.get('Partner').ID);
                        Ext.getCmp("editBEGINTIME").setValue(eval('new ' + (e.record.get('BEGINTIME').replace(/\//g, ''))));
                        Ext.getCmp("editENDTIME").setValue(eval('new ' + (e.record.get('ENDTIME').replace(/\//g, ''))));
                    }, 100);
                },
                edit: function (editor, e, eOpts) {
                    var name = "";
                    for (var i = 0; i < pjson.length; i++) {
                        if (Ext.getCmp("editPartner").getValue() == pjson[i]["ID"]) {
                            name = pjson[i]["NAME"];
                            break;
                        }
                    }
                    e.record.set('Partner', { ID: Ext.getCmp("editPartner").getValue(),NAME:name });
                    e.record.commit();                    
                }
            }
        });
Go 旅城通票 2015-07-22
  • 打赏
  • 举报
回复
你的Partner那个键值最好改为普通类型,不要为对象,要不editor是直接使用那个键的值的,不会取子键值,就是你配置的renderer。 当然你不嫌麻烦,可以配置rowEditing的相关事件来自己更新记录
    var rowEditing = Ext.create('Ext.grid.plugin.RowEditing', {
        clicksToMoveEditor: 2,
        autoCancel: false, listeners: { beforeedit: function (editor, e, eOpts) { 
            setTimeout(function () {
                var x =document.getElementById('xxxx');
                x.value = e.record.get('Partner').NAME;
            }, 100)
        }, edit: function (editor, e, eOpts) {
            var x = document.getElementById('xxxx'); 
            e.record.set('Partner', { NAME: x.value });
            e.record.commit();
        }
        }
    });
{ header: '举办方', dataIndex: 'Partner', editor: { allowBlank: false, inputId: 'xxxx' } } startdt的内容要改为时间对象,而不是字符串。如 "startdt":"Date(1438272000000)",你要改成"startdt":new Date(1438272000000),这样startdt才是时间,而不是字符串。要不直接显示你的startdt内容,因为不是时间对象,虽然你那列添加了renderer进行格式化
fff-cai 2015-07-21
  • 打赏
  • 举报
回复
extjs都没人用吗?高手何在

87,955

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧