2011-04-27 63 views
0

我試圖添加一些代碼,只要用戶單擊Sencha觸摸面板中的某個單選按鈕選項時就會調用該代碼。我通過在面板主體上添加一個點擊偵聽器並檢查目標並確保它是一個單選按鈕(具有值)來工作。在Sencha Touch中處理單選按鈕上的事件

我確定有一個更好的方法來綁定這個處理程序。我看過一些關於聽衆的教程,並從我的理解中「我做錯了」。但是我可以在哪裏找到有關正確的信息?下面是我在做什麼,它適用於使用煎茶觸摸1.1.0一個精簡版(這是應用程序的JavaScript文件):

Ext.setup({ 
    onReady: function() { 
     panel = new Ext.Panel({ 
      fullscreen: true, 
      title: 'Test', 
      scroll: 'vertical', 
      items: [{ 
       xtype: 'fieldset', 
       defaults: { 
        xtype: 'radiofield', 
        labelWidth: '80%', 
        name: 'opt', 
       }, 
       items: [{label: 'first', value: 1}, {label: 'second', value: 2}] 
      }], 
     }); 

     panel.addListener({ 
      body: { 
       click: function(ctl) { 
        if (ctl && ctl.target && ctl.target.value) { 
         console.log('checked control ' + ctl.target.value); 
        } 
       } 
      } 
     }); 
    } 
}); 

我假設我應該做的是綁定到字段集而不是正文,並且可能會聽取更改事件而不是單擊事件。但除此之外,我嘗試過的所有表單似乎都不起作用。

回答

1

我工作下一個版本是這樣的:

panel = new Ext.Panel({ 
    fullscreen: true, 
    title: 'Test', 
    scroll: 'vertical', 
    items: [{ 
     xtype: 'fieldset', 
     defaults: { 
      xtype: 'radiofield', 
      labelWidth: '80%', 
      name: 'opt', 
     }, 
     items: [{label: 'first', value: 1}, {label: 'second', value: 2}] 
    }], 
    listeners: { 
     el: { 
      tap: function(ctl) {console.log("Checked " + ctl.target.value);}, 
      delegate: "input", 
     } 
    }, 
}); 

我懷疑有一種方法可以附上到fieldset元素,而不是面板,但是這比我有的選擇好得多。我不再需要檢查傳遞到click事件處理程序的目標項目,看它是否是一個單選按鈕,委託設置會照顧到這一點。現在,當我動態地將項目添加到字段集時,處理程序可以正常工作。

0

您可以嘗試將偵聽器添加到您的無線電場項目,或者像您所說的那樣,而不是添加到字段集。這應該radiofield項工作:

items: [{ 
    label: 'first', 
    value: 1, 
    listeners: { 
     check: function(button) { 
      console.log('...'); 
     } 
    } 
}, { 
    label: 'second', 
    value: 2, 
    listeners: { 
     check: function(button) { 
      console.log('...'); 
     } 
    } 
}] 
+1

感謝@nicodemuz,但我只能得到直接增加了無線電管制時工作。當我將偵聽器添加到整個字段集或面板時,它不會觸發。我認爲偵聽器系統的全部目的是在不同的級別進行綁定,以便新添加的控件可以自動獲得現有的處理程序。而那些未處理的事件會泡起來,直到他們擊中了處理程序。但是,似乎並不是這樣。任何其他方法來嘗試這個想法?我不知道如何調試這樣的事件。 – mikerowehl 2011-04-27 03:06:40

0

可以監聽(S)添加到原腳本的默認部分,像這樣:

xtype: 'radiofield', 
     listeners: { 
      check: function() { 
      alert(this.value); 
      } 
     },