2012-07-12 61 views
0

我試圖設置我的控制器來響應Ext.XTemplate事件並避免編寫一堆被黑客入侵的JavaScript的混亂。在XTemplate中註冊一個事件 - Sencha Touch 2?

不幸的是,我找不到1)記錄點擊事件或2)使用componentQuery註冊XTemplate的方法。

這是一個基本控制器配置:

config: { 
     refs: {   
      reportChooser: 'xtemplate[id=jobReportChooser]' 
     }, 
     control: { 
      reportChooser: { 
       tap: 'onAnonymousTap' 
      } 
     } 
    }, 

有沒有辦法做到這一點的控制器或至少清理聽衆?

回答

0

我找不到直接參考,因爲XTemplate沒有內置事件,但這裏有一個很好的解決方法,它有點乾淨。

在你看來初始化方法

initialize: function() { 
    this.element.on({ 
     tap: function(e, dom) { 

      var el = Ext.get(e.target), 
       elParent = Ext.get(e.parent), 
       fireEvent; 

      window.jobAction = this; 
      window.jobEl = el; 

      if (el.hasCls('job-start') || el.parent().hasCls('job-start')) { 
       fireEvent = 'start'; 
      } else if (el.hasCls('job-hold') || el.parent().hasCls('job-hold')) { 
       fireEvent = 'hold';      
      } else if (el.hasCls('job-report') || el.parent().hasCls('job-report')) { 
       Ext.Viewport.setMasked({ xtype: 'loadmask' }); 
       var teamId = APPNAME.currentItem.data.teamId; 
       var jobId = APPNAME.currentItem.data.jobId; 

       APPNAME.app.dispatch({controller: 'Jobs', action: 'displayReportChooser', args:[teamId,'job',jobId]}) 
      } 

      if (fireEvent) { 
       Ext.Viewport.setMasked({ xtype: 'loadmask' }); 
       this.fireEvent(fireEvent, Alloy.currentJob, el); 
      } 

     }, 
     delegate: '.job-info', 
     scope: this 
    }); 
} 

這意味着什麼

使用的應用程序dispatch method。它會讓生活變得更容易,並幫助您在控制器內組織行動。

http://docs.sencha.com/touch/2-0/#!/api/Ext.app.Application-method-dispatch