2012-03-03 10 views
5

que tiene una rejilla de Ext JS, como a continuación:Ext JS tener una columna de botones de radio

var grid = new Ext.grid.GridPanel({ 
columns: [ 
{header: 'Account Id',dataIndex:'accountId' }, 
{header: 'Account NUmber',dataIndex:'accountNumber' } 
] 
}) 

ahora tengo que mostrar la columna ID de la cuenta como una columna de botones de radio. Entonces, desde la grilla, el usuario puede seleccionar una ID de cuenta y enviarla. Cuando el usuario recarga la página, esa identificación de cuenta debe ser preseleccionada.

Necesito ayuda sobre cómo proceder con esto. ¿Debo escribir un procesador en la columna Id de la cuenta? O hay una forma más fácil.

EDIT: lo hice así:

{header: 'Account Id',dataIndex:'accountId',renderer: function(value) { 
return "<input type='radio' name = 'primaryRadio' " + (value ? "checked='checked'" : "") + ">"; 
}}, 

¿Cuál es la sintaxis para añadir un evento onclick o onchange evento para el grupo de radio?

+1

Se puede publicar como una respuesta para que pueda aceptar :) – Victor

+0

que acabo de hacer?. ¡Gracias! –

Respuesta

3

Has hecho bien en mostrar la columna Account Id como una columna de botones de opción, mediante el uso de una función de renderizado.

En cuanto al evento onclick para éstos, es posible que sólo tiene que añadir el atributo onclick en la etiqueta HTML:

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

La construcción de la respuesta anterior, sí, creo que el uso de un procesador para su columna es la solución correcta . Creo que deberías ir sobre el evento click de forma diferente a lo sugerido por J. Bruni. Recomendaría un detector de clics en el panel de la cuadrícula que verifica si hizo clic en un botón de opción y lo delega a un método en su GridPanel.

Algo como esto:

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 
     } 
    } 
}); 
+0

+1 Esto es mejor que establecer 'onclick' en cada elemento. Parecía un poco detallado ... ¿Tenemos una forma más corta/limpia de adjuntar el controlador de eventos? Algo como '$ ('# grid') de jQuery. On ('click', 'input [type =" radio "]', callback);' o '$ ('input.account_id'). Click (callback);' (suponiendo que agreguemos una clase 'account_id' a las entradas) ... –

+0

Sí, jQuery hace mucho con poco código :). Sin embargo, en este ejemplo, y en general con Ext, es mejor ajustar los componentes de su empresa como clases que extienden el componente Ext, que es la mayor parte del código que escribí anteriormente. La versión más corta, sin crear una clase completa, sería algo así como 'myGrid.el.on ('click', functionToCheckForRadio)', y aún necesitaría la lógica 'event.getTarget'. No sé de ninguna forma de mano más corta en Ext de filtrado de eventos en función del objetivo al que se hizo clic, ¡aunque eso suena como una buena extensión! –