У меня есть CellTable с несколькими строками, для которых я использую MultiSelectionModel. Первый столбец - это столбец флажков. Когда пользователь проверяет один из флажков, выбирается строка (в соответствии с примером на сайте), и когда пользователь нажимает на строку, вызывается функция «doActionOnRow()».В GWT CellTable, как я могу заставить ячейку использовать событие click, чтобы оно не доходило до строки?
Моя проблема в том, что когда пользователь проверяет флажок, также вызывается «doActionOnRow()». Как я могу заставить CheckboxCell использовать событие click, чтобы оно не запускалось и на клеточной таблице?
EDIT:
Это мой код:
table.addCellPreviewHandler(new Handler<Patient>() {
@Override
public void onCellPreview(CellPreviewEvent<Patient> event) {
boolean isClick = "click".equals(event.getNativeEvent().getType());
if (isClick) {
doSomething();
}
}});
Column<Patient, Boolean> checkColumn = new Column<Patient, Boolean>(new CheckboxCell(true, false)) {
@Override
public Boolean getValue(Patient object) {
// Get the value from the selection model.
return sm.isSelected(object);
}
@Override
public void onBrowserEvent(Context context, Element elem, Patient patient, NativeEvent event) {
if ("click".equals(event.getType()))
event.stopPropagation();
super.onBrowserEvent(context, elem, patient, event);
}
};
table.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("<br/>"));
Даже когда я добавляю event.stopPropagation();
doSomething();
вызывается, когда я нажимаю флажок.
Любая идея, почему?
Doesnt похож на работу. Я редактировал свой вопрос и добавил свой код. – Oberon
Этот шов вы вызываете super.onBrowserEvent() после прекращения распространения, посмотрите исходный код GWT, чтобы увидеть, что они делают с событием, распространение которого было остановлено: я не думаю, что они справляются с этим). Как вы видите, в моем коде я беру дескриптор события. Вы должны прекратить распространение в тот момент, когда вам больше не нужен GWT, чтобы что-то сделать. Это означает, что на данный момент вы потребляете событие, например, onClick(), не в том месте, где вы отправите задание в GWT, чтобы они обрабатывали событие –
Другими словами: либо не вызывайте super.onBrowserEvent (контекст, elem, patient, событие) и обрабатывать его самостоятельно Или зайдите в onCellPreview(), в каком столбце вы должны знать, хотите ли вы вызвать event.stopPropagation() или нет –