вызов JQuery показать / скрыть идентификатор на родительской странице - PullRequest
0 голосов
/ 22 декабря 2011

Я пытаюсь заставить это работать, в методе renderHead Wicket параметр IHeaderResponse в ответ передает javascript, чтобы показать соответственно скрытые ссылки на вызывающей родительской странице.Это часть мобильного веб-приложения, которое обслуживается через сервер Apache Tomcat.

StartPage.html, (вызывающая родительская страница, где ссылки, которые должны быть скрыты / показаны)

<li class="ui-block-e">
    <a wicket:id="logoutlink" id="logout" href="#" data-theme="a" class="ui-btn-corner-   all ui-btn ui-btn-up-a ui-btn-icon-top">
        <span class="ui-btn-inner ui-btn-corner-all">
        <span class="ui-btn-text">Logga ut</span>
        <span class="ui-icon ui-icon-custom"></span>
           </span>
<a wicket:id="loginlink" id="login" href="/domain/mobile/login" data-theme="a"    class="ui-btn-corner-all ui-btn ui-btn-up-a ui-btn-icon-top">
    <span class="ui-btn-inner ui-btn-corner-all">
    <span class="ui-btn-text">Logga in</span>
        <span class="ui-icon ui-icon-custom"></span>
    </span>
     </a>
</li>

LoginRedirectPage.java, (страница, содержащая перенаправления js)

@Override
public void renderHead(IHeaderResponse response) {
log.info("Redirecting to " + redirectUrl);//to check via log

// if the parent is the mobile app..
response.renderOnDomReadyJavascript(
"if(parent && parent.$ && parent.$.mobile){" +
"parent.$('#logout').show();" +
"parent.$('#login').hide();" +
"parent.history.go(-2);" +                  
"console.log('redirecting with jqm "+redirectUrl+"');" +//logging
"}");

Однако, (увидела это, да!?),

строки "parent. $ ('# Logout').шоу();"и "parent. $ ('# login'). hide ();"

делает то, что они должны делать в браузере (через ПК), ссылка для выхода из системы включена, а ссылка для входа скрыта (если пользователь вошел в систему).

Но при выполнении этого через телефон Android ссылки не показаны / скрыты, как и должно быть, ссылка для входа в системувсе еще сидит там.Как будто я не вошел в систему, хотя в журналах видно, что я вошел в систему.

Константа "redirectUrl" в этом случае указывает на StartPage.html.

ПоКстати, я также пытался использовать JS старого стиля, напр."parent.document.getElementById ('logout'). style.display = 'block';", безрезультатно.

Заранее спасибо.

// Kalle

Ответы [ 2 ]

1 голос
/ 23 января 2012

Хорошо, это было давно, но вот что я наконец-то сделал, чтобы это сработало для меня, на данный момент я хочу поблагодарить jbrookover за его быстрый ответ. Решение, однако, оказалось более «устаревшим».

В случае использования JQueryMobile, страницы хранятся в кеше, чтобы снизить стоимость загрузки страниц. Это означало, что страница, с которой начинается все, также хранится в кэше, сохраняя способ отображения различных ссылок в телефоне Android, и в этом решении использовался старый устаревший HTML. Включив следующее в раздел заголовка стартовой страницы,

 <meta http-equiv="Pragma" content="no-cache" />
 <meta http-equiv="Cache-control" content="no-cache" />
 <meta http-equiv="Expires" content="0" />

эта страница никогда не сохранялась в кеше JQueryMobile и коде javscript,

@Override
public void renderHead(IHeaderResponse response) {
log.info("Redirecting to " + redirectUrl);//to check via log

// if the parent is the mobile app..
response.renderOnDomReadyJavascript(
"if(parent && parent.$ && parent.$.mobile){" +
"parent.$('#logout').show();" +
"parent.$('#login').hide();" +
"parent.history.go(-2);" +                  
"console.log('redirecting with jqm "+redirectUrl+"');" +//logging
"}");

действительно вступал в силу.

Надеюсь, это может пригодиться кому-то, у кого в какой-то момент возникла проблема с кэшированием JQueryMobile.

Sinc.

0 голосов
/ 24 декабря 2011

Wicket свободно доступен для перезаписи идентификаторов ваших элементов, особенно если вы делаете что-то сложное с Ajax. Тем не менее, он делает эти идентификаторы доступными для использования в таких вещах, как это. Вот ваш код Java:

Link logoutLink = new Link("logoutlink");
logoutLink.setOutputMarkupId(true); // Explicitly create the ID attribute
add(logoutLink);

Затем, когда вы визуализируете свой JavaScript, настройте эту строку так:

"parent.$('#" + logoutLink.getMarkupId() + "').show();"

Очевидно, вам придется поместить переменную logoutLink в область, доступную для метода renderHead.

Вы можете подтвердить, что это действительно проблема, посмотрев на ваш обработанный код. Возможно, идентификатор изменился с «logout» на что-то вроде «logoutlink12»

...