2012-09-05 121 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

嘗試我的建議,在「最後」下,然後 –