Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs EXT js网格有一列单选按钮_Extjs - Fatal编程技术网

Extjs EXT js网格有一列单选按钮

Extjs EXT js网格有一列单选按钮,extjs,Extjs,我有一个ext js网格,如下所示: var grid = new Ext.grid.GridPanel({ columns: [ {header: 'Account Id',dataIndex:'accountId' }, {header: 'Account NUmber',dataIndex:'accountNumber' } ] }) 现在我需要将accountid列显示为单选按钮列。因此,用户可以从网格中选择一个帐户Id并提交。当用户重新加载页面时,应该预先选择该帐户id 我需要一些关

我有一个ext js网格,如下所示:

var grid = new Ext.grid.GridPanel({
columns: [
{header: 'Account Id',dataIndex:'accountId' },
{header: 'Account NUmber',dataIndex:'accountNumber' }
]
})
现在我需要将accountid列显示为单选按钮列。因此,用户可以从网格中选择一个帐户Id并提交。当用户重新加载页面时,应该预先选择该帐户id

我需要一些关于如何继续这方面的帮助。我是否需要在帐户Id列上编写渲染器?还是有更简单的方法

编辑:我喜欢这样:

{header: 'Account Id',dataIndex:'accountId',renderer: function(value) {
return "<input type='radio' name = 'primaryRadio' " + (value ? "checked='checked'" : "") + ">";
 }},
{标题:“帐户Id”,数据索引:“帐户Id”,呈现器:函数(值){
返回“”;
}},

将onclick事件或onchange事件添加到单选组的语法是什么?

通过使用渲染器函数,您在将帐户Id列显示为单选按钮列方面做得很好

关于这些的onclick事件,您只需在HTML标记中添加onclick属性:

return "<input onclick='my_function()' type='radio' name = 'primaryRadio' " + (value ? "checked='checked'" : "") + ">";
返回“”;

基于前面的答案,是的,我认为为您的专栏使用渲染器是正确的解决方案。我认为你应该以不同于J.Bruni建议的方式来处理点击事件。我建议在网格面板上安装一个click监听器,检查您是否单击了单选按钮,并将其委托给网格面板中的方法

大概是这样的:

MyRadioGrid = Ext.extend(Ext.grid.GridPanel, {
    columns: [
        {header: 'Account Id',dataIndex:'accountId', renderer: function(value) {
            return "<input type='radio' name = 'primaryRadio' " + (value ? "checked='checked'" : "") + ">";
        }},
        {header: 'Account NUmber',dataIndex:'accountNumber' }
    ],

    afterRender: function() {
        MyRadioGrid.superclass.afterRender.apply(this, arguments);
        this.el.on('click', this.checkRadioClick, this);
    },

    checkRadioClick: function(event) {
        if (event.getTarget('input[type="radio"]')) {
            //radio clicked... do something
        }
    }
});
MyRadioGrid=Ext.extend(Ext.grid.GridPanel{ 栏目:[ {标题:“帐户Id”,数据索引:“帐户Id”,呈现程序:函数(值){ 返回“”; }}, {标题:'帐号',数据索引:'accountNumber'} ], afterRender:function(){ MyRadioGrid.superclass.afterRender.apply(这是参数); this.el.on('click',this.checkRadioClick,this); }, checkRadioClick:功能(事件){ if(event.getTarget('input[type=“radio”]”){ //收音机响了…做点什么 } } });
你能把它作为答案贴出来让我接受吗?:)+1这比在每个元素中设置
onclick
要好。只是看起来有点冗长。。。我们是否有一种更短/更干净的方法来附加事件处理程序?类似于jQuery的
$('#grid')。在('click','input[type=“radio”]',callback)上
$('input.account\u id')。单击(回调)(假设我们在输入中添加了一个“account\u id”类)…是的,jQuery用很少的代码做了很多事情:)。不过,在本例中,通常使用Ext时,最好将业务组件包装为扩展Ext组件的类,Ext组件是我上面编写的大部分代码。较短的版本没有创建整个类,只是类似于
myGrid.el.on('click',functionToCheckForRadio)
,然后仍然需要
事件.getTarget
逻辑。我不知道在Ext中有任何基于点击的目标过滤事件的快捷方式,尽管这听起来像是一个不错的扩展!