【问题标题】:Adding a click event to displayfield向显示字段添加点击事件
【发布时间】:2012-08-23 07:07:45
【问题描述】:

我想在我的 extjs 应用程序中进行内联编辑: 我创建了一个简单的表单,其中充满了显示字段,旁边有一个小图标,表明它们是可编辑的。我希望它们成为点击时的实际字段。

我看到了类似的问题here,但没有答案。

这是我的表格:

var editPic = "<img src='https://s3.amazonaws.com/bzimages/pencil.png' alt='edit' height='24' width='24'/>";

Ext.define('BM.view.test.Edit', {
    extend: 'Ext.form.Panel',
    alias: 'widget.test-edit',

    layout: 'anchor',
    title: 'Edit Test',
    defaultType: 'displayfield',

//    handleFieldChanged: function() {
//        console.log('click el');
//    },
//
//    listeners: {
//        add: function(me, component, index) {
////            if( component.isFormField ) {
//                component.on('click', me.handleFieldChanged, me);
////            }
//        }
//    },

    items: [
        {name: 'id', hidden: true},
        {
            name: 'name',
            fieldLabel: 'Name',
            afterSubTpl: editPic,
            cls: 'editable',
            listeners: [
                {
                    element: 'element',
                    delegate: '.editable',
                    event: 'click',
                    fn: function() {
                        console.log('Edit Now!');
                    }
                }
            ]
        },

        {name: 'status', fieldLabel: 'Status'}
        ]
});

这是我的控制器内部的控件:

    this.control({
        'test-edit': {
            afterrender: this.beenRendered
        },
        'test-edit > displayfield': {
            click: this.updateTestField
        }
    });


updateTestField: function(button) {
    console.log('field clicked');
},

beenRendered: function() {
        console.log('Rendered!'); // Getting here
        var myDiv = Ext.get(".editable");  // Doesn't find anything
        myDiv.on("click",handleClick); 

    function handleClick(e, t){ // e is not a standard event object, it is a Ext.EventObject
        e.preventDefault();
        console.log('clicked');
    }

},

据我了解,字段没有监听点击事件。我该怎么做? 正如您在上面看到的,我尝试了很多方法。 afterrender 事件效果很好。

也许我应该以某种方式将字段封装在一个监视点击事件的容器中?

任何线索将不胜感激。

【问题讨论】:

    标签: javascript extjs4.1


    【解决方案1】:

    使用getEl() 方法定义字段。

    df.getEl().on('click', function(){});
    

    【讨论】:

      【解决方案2】:

      您可以使用el 属性:

      ..
      beenRendered: function(df) {
              console.log('Rendered!'); // Getting here
              var el = df.el;
              el.on("click",handleClick); 
      
          function handleClick(e, t){
              e.preventDefault();
              console.log('clicked');
          }
      
      }
      

      el 是 Ext.Element(html dom 的包装器)w/c 的一个实例,您可以使用它来处理事件。

      【讨论】:

      • 你是个天才!我一直想知道如何连接这些点,这就是诀窍。 10 倍。
      • 如果你愿意,还有一个问题:现在我有了带有 't' 的 DOM 元素,如何获得原始 ext 字段?而是...如何将 df 发送到 handleClick?
      • 它是传递给处理程序的第一个参数。在代码中,这就是df 变量。
      • 我明白了,但是如何将df作为参数发送到handleClick?
      • 我想通了:在'on'方法中,第三个参数是作用域,fourth是回调函数的参数。 ` el.on("点击", handleClick, this, df);函数句柄点击(e,t,df){`
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多