2011-04-27 60 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); 
      } 
     },