2012-01-25 27 views
0

我試圖在sencha touch中觸發自定義事件,並且它似乎被添加到可以觸發的事件中,並且它似乎在觸發,但我的偵聽器確實似乎沒有迴應事件。似乎無法響應sencha touch中的事件觸發

事件被這裏instantinated,其中這是形式體:

Ext.apply(this, { 
     scroll: 'vertical', 
     dockedItems: [ titlebar, buttonbar ], 
     items: [ fields ], 
     listeners: { 
      beforeactivate: function() { 
       var saveButton = this.down('#userFormSaveButton'); 
        saveButton.setText('Submit'); 
        this.addEvents('cityUpdate'); 
        console.log('event added'); 

      }, 
      deactivate: function() { 
       this.resetForm(); 
      } 
     } 
    }); 

然後該事件被觸發的位置:

if (result.data != 'false' && result.data.state) { 
     Ext.getCmp("usersForm").fireEvent('cityUpdate', result.data.towns); 
     console.log('event fired'); 
     alert('Your town is ' + result.data.towns + ' ' + result.data.state.replace(/\+/g , ' ')); 

    } 

然後聽者在這裏應用於場的形式:

   { 
       xtype: 'textfield', 
       name: 'city', 
       label: 'City*', 
       placeHolder: 'New York', 
       useClearIcon: true, 
       id:'city', 
       listeners: { 
        cityUpdate: function(city) { 
         console.log('event reponse' , this.fieldEl.dom , city); 
        } 
       } 
      }, 

有人可以向我解釋爲什麼我無法看到c中的事件響應調用onsole?我看到事件添加和事件觸發,但我似乎沒有得到事件來實際運行事件響應控制檯語句。我在控制檯中沒有收到任何錯誤,所以我對這裏發生的事情感到有些不知所措?

+0

試着做'console.log(Ext.getCmp(「usersForm」))'看看會出現什麼 – mowwwalker

回答

2

它看起來像表單正在觸發事件,但您已將偵聽器添加到窗體上的文本字段。

如果usersForm是調用fireEvent的那個,那麼該事件的偵聽器需要位於usersForm自身上。

如果您在beforeactivatedeactivate的同一個塊中添加cityUpdate處理程序到第一個代碼段,會發生什麼情況?這是否抓住了這個事件?如果是這樣,你是不是期待它被抓到?如果是的話,可能會是一個輕微的設計問題。

+0

在我解決這個問題的同一個元素上觸發事件。謝謝!我的假設是你可以像Mootools一樣設置普遍的監聽器,讓他們監聽事件觸發,然後適當地執行它們的代碼 – Xenology

相關問題