2012-03-03 2 views
5

У меня есть Ext, сетки, как показано ниже:Ext, сетка имеет один столбец переключателей

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

Теперь мне нужно, чтобы показать счета Id столбец как столбец переключателей. Поэтому из сетки пользователь может выбрать один идентификатор учетной записи и отправить. Когда пользователь перезагружает страницу, этот идентификатор учетной записи должен быть предварительно выбран.

Мне нужна помощь в том, как действовать дальше. Нужно ли мне писать рендерер в столбце «Идентификатор учетной записи»? Или есть более простой способ.

EDIT: Я сделал так:

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

Что такое синтаксис, чтобы добавить событие OnClick или OnChange событие в группе радио?

+1

Вы можете разместить его в качестве ответа, так что я могу принять :) – Victor

+0

я только что сделал?. Благодаря! –

ответ

3

Вы хорошо указали столбец идентификатора учетной записи в качестве столбца переключателей с помощью функции рендеринга.

Что касается события OnClick для них, вы можете просто добавить атрибут OnClick в HTML-тег:

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

Строительство от предыдущего ответа, да, я думаю, с помощью рендерер для столбца является правильным решением , Я думаю, вы должны пойти по событию клика иначе, чем предложил Дж. Бруни. Я бы рекомендовал прослушиватель кликов на вашей панели сетки, который проверяет, нажал ли вы переключатель и делегирует метод в свой GridPanel.

Что-то вроде этого:

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 Это лучше, чем установка 'onclick' в каждом элементе. Это только показалось немного подробным ... У нас есть более короткий/более чистый способ привязать обработчик событий? Что-то вроде jQuery '$ ('# grid'). On ('click', 'input [type =" radio "]', callback);' или '$ ('input.account_id'). Click (callback);' (при условии, что мы добавили класс «account_id» к входам) ... –

+0

Да, jQuery делает много с небольшим кодом :). В этом примере, хотя и в целом с Ext, лучше всего обернуть ваши бизнес-компоненты как классы, расширяющие компонент Ext, который является основной частью кода, который я написал выше. Более короткая версия, не создавая целый класс, будет просто чем-то вроде myGrid.el.on ('click', functionToCheckForRadio) ', и тогда вам все равно понадобится логика' event.getTarget'. Я не знаю более короткого пути в Ext для фильтрации событий на основе щелчка, хотя это звучит как приятное расширение! –

Смежные вопросы