2009-12-28 3 views
0

В моем проекте GWT мы обновляем дизайн, и я застрял в проблеме.GWT Hyperlink getHTML не поддерживает событие click

У меня заголовок сайта, у нас есть ссылка для входа, которая входит между текстом типа «Уже зарегистрированный пользователь - Вход - Bla bla bla».

Я заменяю текст «Войти» новой гиперссылкой («Login», «») .getHTML().

Я получаю ссылку, но событие click не работает.

Если я добавляю гиперссылку внутри панели, такой как horizontalPanel.add (новая гиперссылка («Вход», «»), событие щелчка работает нормально.

Как решить эту проблему.


Я попытался установить clicklisner как после того, как и перед вызовом getHTML() и он не работает

ответ

0

Вы добавляете обработчик щелчка гиперссылке перед заменой с помощью getHTML()? Если это так, я бы предположил, что код для обработчика кликов не включен в установленный HTML.

4

Строка, возвращаемая Hyperlink.getHTML(), не является виджетами GWT, поэтому у нее нет обработчиков кликов или каких-либо специальных способностей, связанных с ним. Это просто строка. Вот почему это работает, когда вы добавляете гиперссылке виджет непосредственно на панели, например, так:

horizontalPanel.add(new Label("Already a registered member - ")); 
horizontalPanel.add(new Hyperlink("Login", "")); 
horizontalPanel.add(new Label(" - Bla bla bla")); 

Если вы предпочитаете при помощи виджетов, а не их строк/HTML представления, их события будут работать должным образом.

P.S: Если вы хотите гиперссылку HTML без взаимодействия с системой истории GWT, вы можете использовать Anchor вместо этого. Допустим, у вас этот HTML уже на странице:

<p> 
    Already a registered member - 
    <a id="loginLink" href="javascript:void(0);">Login</a> 
    - Bla bla bla 
</p> 

Затем вы можете обернуть существующий HTML гиперссылку с виджетом Якорь и добавить обработчики щелчка к этому.

Anchor a = Anchor.wrap(DOM.getElementById("loginLink")); 
a.addClickHandler(...); 
1

Я бы предположил, что вы просто создаете два виджетов, у которых есть ссылка для входа, а другая - текст. Переключайте видимый флаг в соответствии с ситуацией, и у вас будет гораздо меньше проблем и более простое решение.

Нечто подобное:

loginLink = new Hyperlink("login"); 
loginLink.addClickHandler(handler); 

label = new Label("Already a registered member - "); 

horizontalPanel.add(label); 
horizontalPanel.add(loginLink); 
horizontalPanel.add(new Label(" - Bla bla bla")); 

label.setVisible(isLoggedIn()); 
loginLink.setVisible(!isLoggedIn());