zadada 2012-08-31 12:39
浏览 293
已采纳

Ext3.4中自己写的TriggerField扩展用到editorgrid里时editor返回单元格赋值失败

Ext.ux.FplbField 返回单元格赋值失败
[code="js"]Ext.ux.FplbField = Ext.extend(Ext.form.TriggerField, {

        initComponent : function() {
            Ext.ux.FplbField.superclass.initComponent.call(this);
            if (!this.treePanel) {
                this.treePanel = new Ext.tree.TreePanel({
                            root : {
                                nodeType : 'async',
                                id : '_root',
                                text : '发票类别',
                                expanded : true
                            },
                            dataUrl : '/wsbx.do?p=getFplbTree'
                        });
            }
            if (!this.panel) {
                this.panel = new Ext.Panel({
                            height : 200,
                            border : false,
                            autoScroll : true,
                            items : [this.treePanel]
                        })
            }
        },
        menuEvents : function(method) {
            this.treePanel[method]('click', this.onSelect, this);//给树添加单击事件
            this.menu[method]('hide', this.onMenuHide, this);
            this.menu[method]('show', this.onFocus, this);
        },
        onSelect : function(node, e) {//单击树节点赋值
            this.setValue(node.id);
            this.menu.hide();
        },
        onMenuHide : function() {
            this.focus(false, 60);
            this.menuEvents('un');
        },
        onTriggerClick : function() {
            if (!this.menu) {
                this.menu = new Ext.menu.Menu({
                            hideOnClick : false,
                            focusOnSelect : false,
                            items : [this.panel]
                        });
            }
            this.onFocus();
            this.menu.show(this.el, 'tl-bl?');
            this.menuEvents('on');
        }
    });

Ext.reg('fplbfield', Ext.ux.FplbField);[/code]
在editorgrid里配置的column:
[code="js"]{
xtype : 'gridcolumn',
dataIndex : 'fplb',
header : '发票类别',
width : 100,
editor : {
xtype : 'fplbfield'
}
}[/code]
页面效果:
[img]http://218.75.78.166/test/fplb.jpg[/img]
实现效果:
onTriggerClick后显示tree,点击tree的节点,返回赋值

  • 写回答

2条回答 默认 最新

  • works001 2012-08-31 18:04
    关注

    已经测试ok
    下面是修改后的代码以及所加代码:
    [code="java"]
    var getSelectRows = function(g) {
    var records = [];
    var selModel = g.getSelectionModel();
    if (selModel.getSelections) {
    records = selModel.getSelections();
    } else {
    var pos = selModel.getSelectedCell();
    if (pos == null) return records;

                var record = g.getStore().getAt(pos[0]);
                if (record) records = [record];
            }
            return records;
    

    }
    [/code]

    插件代码:
    [code="java"]
    Ext.ux.FplbField = Ext.extend(Ext.form.TriggerField, {

            initComponent : function() {
                Ext.ux.FplbField.superclass.initComponent.call(this);   
                if (!this.treePanel) {   
                    this.treePanel = new Ext.tree.TreePanel({   
                                root : new Ext.tree.TreeNode({   
                                   // nodeType : 'async',   
                                    id : '_root',   
                                    text : 'xzd',   
                                    expanded : true  
                                })
                                //,dataUrl : '/wsbx.do?p=getFplbTree'  
                            });   
                }   
                if (!this.panel) {   
                    this.panel = new Ext.Panel({   
                                height : 200,   
                                border : false,   
                                autoScroll : true,   
                                items : [this.treePanel]   
                            })   
                }   
            },   
            menuEvents : function(method) {   
                this.treePanel[method]('click', this.onSelect, this);//给树添加单击事件   
                this.menu[method]('hide', this.onMenuHide, this);   
                this.menu[method]('show', this.onFocus, this);   
            },   
            onSelect : function(node, e) {//单击树节点赋值   
                var gdom = this.el.findParentNode('div.x-grid-panel');
                var grid = Ext.getCmp(gdom.id);
                var tagRecord;
                if (grid) {
                    var selRecord = getSelectRows(grid);
                    if (selRecord && selRecord.length > 0) {
                        tagRecord = selRecord[0];
                    }
                }
    
                tagRecord.set(this.nameValue,node.text);
                tagRecord.commit();
    
                this.setValue(node.id);   
                this.menu.hide();   
            },   
            onMenuHide : function() {   
                this.focus(false, 60);   
                this.menuEvents('un');   
            },   
            onTriggerClick : function() {   
                if (!this.menu) {   
                    this.menu = new Ext.menu.Menu({   
                                hideOnClick : false,   
                                focusOnSelect : false,   
                                items : [this.panel]   
                            });   
                }   
                this.onFocus();   
                this.menu.show(this.el, 'tl-bl?');   
                this.menuEvents('on');   
            }   
        });   
    

    Ext.reg('fplbfield', Ext.ux.FplbField);

    [/code]

    使用例子:
    [code="java"]{
    header: 'Indoor?',
    dataIndex: 'indoor',
    width: 55,
    editor : {

    xtype : 'fplbfield',
    nameValue:"indoor"

            }           
        }[/code]
    

    上面插件代码中的root部分 你换成你原来自己的代码
    关键是插件代码中的onSelect 部分处理

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

报告相同问题?

悬赏问题

  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度