在ExtJS按钮中使用setHandler时,处理程序函数立即执行

时间:2013-02-28 13:58:05

标签: javascript button extjs

我在面板上添加了一个按钮。单击该按钮时,将显示一个弹出窗口。我尝试使用setHandler更新弹出窗口的内容。但是每当调用setHandler时,处理程序函数都会立即执行。以下是示例代码:


    me.panels[i].getDockedItems()[0].setHandler(Popup({html: tiphtml}), this);
    ...
    Popup = function(cfg) {
      cfg = Ext.apply({
        height: 100, 
        width: 200,
        layout: 'fit'
      }, cfg);

      Ext.create('Ext.window.Window', {
          title: cfg.title,
          height: cfg.height,
          width: cfg.width,
          layout: cfg.layout,
          html: cfg.html 
      }).show();
    }

1 个答案:

答案 0 :(得分:2)

您需要将函数嵌套在匿名函数中。您实际上是在代码中调用函数,而不是传递它。这将有效:

    me.panels[i].getDockedItems()[0].setHandler(function(){Popup({html: tiphtml})}, this);
    ...
    Popup = function(cfg) {
      cfg = Ext.apply({
        height: 100, 
        width: 200,
        layout: 'fit'
      }, cfg);

      Ext.create('Ext.window.Window', {
          title: cfg.title,
          height: cfg.height,
          width: cfg.width,
          layout: cfg.layout,
          html: cfg.html 
      }).show();
    }