2012-09-05 69 views
0

我试图调用resetCombo方法有一次,我从提示这是对组合extjs4 MVC范围问题

呈现链接点击,但我不能够访问它,因为范围问题,我缺少的不知道是什么。请帮助我。

Ext.define('test.BasicForm', { 
      extend: 'Ext.form.Panel', 
      renderTo:Ext.getBody(), 
      initComponent :function(){ 
       this.items=[ 
       { 

        fieldLabel: 'Test', 
        xtype: 'combo', 
        displayField: 'name', 
        width: 320, 
        labelWidth: 130, 
        store: [ 
          [1, 'Value 1'], 
          [2, 'Value 2'], 
          [3, 'Value 3'], 
          [4, 'Value 4'] 
         ], 
        listeners:{ 
        afterrender: function(combo) { 
         Ext.create('Ext.tip.ToolTip', { 
          target: combo.getEl(), 
          autoHide: false, 
          name:'tool-tip', 
          scope:this, 
          html: 'Old value was '+ combo.getValue()+ '<a href="#" onclick="javascript:resetCombo();return false;"> test</a>', 

          listeners: { 
           beforeshow: function() { 
            return combo.isDirty(); 
           } 
          } 
         }); 
        } 
        }, 
        value:'1' 


       }]; 
       this.callParent(arguments); 
       }, 

      resetCombo:function(){ 
       alert('called'); 
      } 



     }); 

回答

0

<a href="#" onclick="javascript:resetCombo();return false;"> test</a>

此代码试图调用名为resetCombo其上存储的顶层对象(window对象)的内部功能。

1

首先这有没有关系,其通常与控制器的控制方法相关ExtJS4的MVC功能:

http://docs.sencha.com/ext-js/4-1/#!/api/Ext.app.Controller-method-control

其次,你可能能够代替得到你想要切换的效果以下内容,完全合格的路径重新组合:

onclick="javascript:test.BasicForm.resetCombo();" //etcetera 

最后,虽然你可能会得到上面的工作,这是远远的最佳实践。我没有时间来给出完整的答案,但你想要做的基本上就是包括:

  1. 添加click事件处理程序的工具提示的基础元素
  2. 然后在元素中使用的参数分机.dom.Element.click(见http://docs.sencha.com/ext-js/4-1/#!/api/Ext.dom.Element-event-click),以确保它是一个<一个>标记,得到了点击
  3. 然后调用所需的功能,而无需使用JavaScript伪URL的和完全合格的路径功能

这里是我遵循上面的指导重写afterrender监听器,并对scope进行了一些调整,特别是将表单的引用存储在同名变量中。

listeners:{ 
    afterrender: function(combo) { 
    var form = this; 

    var tooltip = Ext.create('Ext.tip.ToolTip', { 
     target: combo.getEl(), 
     autoHide: false, 
     name:'tool-tip', 
     html: 'Old value was '+ combo.getValue()+ ' <a class="tooltipHref" href="#">test</a>', 

     listeners: { 
     beforeshow: function() { 
      return combo.isDirty(); 
     }, 
     afterrender: function() { 
      tooltip.el.on('click', function(event, element) { 
      if (element.className == 'tooltipHref') { 
       form.resetCombo(); 
      } 
      });        
     } 
     } 
    }); 
    }, 
    scope: this 
} 
+0

我试过这个,但仍然收到同样的错误。 “不是函数” – Elango

+0

其实我试图动态地将工具提示添加到组合控制器中。我只是以此为例来说明如何访问控制器中的方法。 – Elango

+0

尝试我的建议,在“最后”下,然后 –