В ZK, в моем классе GenericForwardComposer, как я могу захватить все события onClick и onChange? - PullRequest
2 голосов
/ 24 ноября 2011

Я знаю, что могу захватить определенную кнопку или текстовое поле, если я определю метод onClick $ id с соответствующим идентификатором. Я хотел бы иметь общий метод onClick-something и onChange-something, который вызывается при нажатии любой кнопки или обновлении любого текстового поля. Это возможно с каркасом ZK?

1 Ответ

1 голос
/ 19 декабря 2011

Вы можете сделать это двумя способами.

1) Определите один обработчик событий на контроллере и перенаправьте все остальные события компонента этому обработчику событий. Например, рассмотрим этот пример файла ZUML, который имеет 3 компонента Button

<zk>
<window id="mainwin" border="normal" title="hello" apply="pkg.TestComposer">
    <button id="btn1" label="Click Me 1" forward="mainwin.onClick" />
    <button id="btn2" label="Click Me 2" forward="mainwin.onClick" />
    <button id="btn3" label="Click Me 3" forward="mainwin.onClick" />
</window>
</zk>

Теперь в контроллере, применяемом к компоненту Window, содержащему эти 3 компонента Button, вы можете определить один обработчик события onClick, как показано ниже

public void onClick () throws Exception {
    Messagebox.show("Someone clicked!!!");
}

Теперь для каждой кнопки вы можете использовать атрибут forward и определять целевой компонент, а также событие, которое будет обрабатываться, в следующем формате forward = "event-name = target-component.target-event". Для получения более подробной информации см. Ссылку на прямой атрибут здесь .

2) В ZK 6 есть еще более элегантный способ добиться этого, используя SelectorComposer и аннотации для определения обработчиков событий. Например,

@Listen("onClick = window > button") 
public void onClickAnyButton() {
  // ...    
}

Пожалуйста, обратитесь к этой небольшой беседе для более подробной информации о SelectorComposer

...