JQuery Mobile changePage - PullRequest
       0

JQuery Mobile changePage

3 голосов
/ 16 ноября 2011

Я занимаюсь разработкой приложения JQuery Mobile и столкнулся с одной проблемой: у меня две страницы, page1.aspx и page2.aspx, я должен перенаправить с page1 на page2.В настоящее время я использую window.location.href для перенаправления, но это показывает загрузку также в адресной строке.

Чтобы избежать этого, я хочу использовать $.mobile.changePage.

Проблема:

Теперь перед перенаправлением я устанавливаю одно значение в переменной localStorage, основываясь на этом значении при событии загрузки page2.aspx Я должен связать страницу.Он отлично работает с window.location.href, но при использовании $.mobile.changePage он перенаправляет, но событие загрузки не срабатывает после перехода на page2.aspx, если я обновляю загружаемую страницу.Поэтому моя проблема заключается в том, что при отображении page2.aspx событие загрузки должно сработать.

Может кто-нибудь сказать мне, почему page2.aspx не загружается при использовании $.mobile.changePage?

Если кто-то знает решение,Пожалуйста, ответьте как можно скорее, это очень срочно.

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

Page1.aspx:

localStorage.setItem("pageCode", "NULLException");
//$.mobile.changePage("../MessageDialog.aspx", "slide", true, true);
$.mobile.changePage("../MessageDialog.aspx", { transition: "slide", changeHash: true, reverse: false }); 

Page2.aspx:

 $('div').live("pageshow", function () {
     if (localStorage.getItem("pageCode") != null) {
         if (localStorage.getItem("pageCode") == "NullException") {
                    $('#lblDialogHeader').text("Error");
                    $('#lblDialogMessage').text("Sorry");
                    document.getElementById("btnOK").setAttribute("onclick", 'Test()');
                }
    }
}

HTML

<div data-theme="c" data-role="page" id="test">
        <div data-role="header" data-theme="b">
            <h1><label id="lblStatus">Status</label></h1> 
        </div>
        <div data-role="content" data-theme="b">
        <h3><label id="lblDialogHeader"></label></h3>
            <p><label id="lblDialogMessage"></label></p>
        </div>
         <div data-role="footer" data-theme="b">
            <div data-role="navbar">
                <ul>
                   <a href="#" data-role="button" id="btnOK" data-icon="check">OK</a>       
                    <a href="#" data-role="button"  id="btnCancel"   data-rel="back" data-icon="delete" >Cancel</a>    
                </ul>
            </div>
        </div>
    </div>

Ответы [ 2 ]

3 голосов
/ 22 сентября 2012

Похоже, что когда вы вызываете changepage, указав переход, вторая страница, кажется, "вставлена" в первую.Вы можете легко проверить это, потому что $(document).ready(function(){}) не работает на второй странице.

Я использую Cordova в приложении Windows Phone 7 , я изменил свой скриптlocation.href для использования $.mobile.changepage() и возникла такая проблема: я хотел, чтобы вторая страница запускала любое событие загрузки, но ни одна не работала (pageshow, pagechange, pagebeforechange, тело onload, $(document).readyи т. д.).

Вот мои выводы, которые могут помочь вам и другим людям:

index.html - это моя стартовая страница следующим образом

<!DOCTYPE html>
<html>
  <head>
  <title></title>

   <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
    <meta charset="utf-8">
    <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.mobile-1.1.1.min.js"></script>
    <script type="text/javascript">
        function callSecondPage() {
            //save my scroll position in index page
            var top = $(window).scrollTop();
            window.sessionStorage.setItem('top', top);
            //go to the second page
            $.mobile.changePage("secondpage.html", { transition: "slide", changeHash: true, reloadPage :true }); 

  </script>
  <link rel="stylesheet" type="text/css" href="css/jquery.mobile-1.1.1.min.css" />
  </head>
  <body onload="onLoad()">
      <div class="my-page" data-role="page" data-title="My App Title" data-theme="a"> 
          <div class="header" data-role="header"> 
              <img src="img/title.png" />
          </div><!-- /header -->
          <div data-role="content"> 
              <div class="my-logo">
                <img src="img/logo.png"/>
              </div>

              <div class="my-content">
            some stuff here
            <a href="#" onclick="callSecondPage()">Call second page</a>

              </div>
          </div>
  </body>
  </html>

Теперь рабочий secondpage.html .Понимая, что невозможно использовать pagechange или $(document).ready, мы замечаем, что мы можем использовать pageinit для имитации «загрузки страницы».

<!DOCTYPE html>
<html>
  <head>
  <title></title>

   <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
    <meta charset="utf-8">

    <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script>
    <script type="text/javascript">
        function onLoad() {
            //LOL! this does not work using $.mobile.changepage as caller
            document.addEventListener("deviceready", onDeviceReady, false);
        }

        // Cordova is loaded and it is now safe to make calls Cordova methods
        //
        function onDeviceReady() {
            //LOL! this will never run using $.mobile.changepage as caller
            // Now safe to use the Cordova API
            var top  = sessionStorage.getItem('top');            
        }

    </script>
  </head>
  <body onload="onLoad()">
      <div class="my-second-page" data-role="page" data-title="App Title" data-theme="b"> 
      <script type="text/javascript">
          $(".my-second-page").live('pageinit', function () {
              //LOL! Hey this WORKS! I can see an output in Visual Studio!
              console.log('************************* pageinit');
              console.log('************************* '+ sessionStorage.getItem('top'));
          });
          $(".my-second-page").live('pagechange', function () {
              //LOL! Again, this is not going to work, well, it does not print an output in Visual Studio!
              console.log('************************* pagechange');
              console.log('************************* ' + sessionStorage.getItem('top'));
          });
        </script>
          <div data-role="header"> 
              <h1>App title</h1>
          </div><!-- /header -->
          <div data-role="content"> 
              <div class="my-content">
                   your stuff here for second page                      
              </div>
              <p>
              <a href="index.html" data-role="button" data-theme="b" data-transition="flip" rel="external" data-icon="back" data-iconpos="left" data-inline="true">Back</a>
              </p>
          </div>

          <div data-role="footer" class="ui-footer" data-position="fixed">
            <h1>My footer</h1>
          </div>
      </div>
  </body>
</html>

Это настоящий рабочий пример, если кому-то понадобится, я могуподелиться примером проекта.

0 голосов
/ 16 ноября 2011

События не совпадают с changePage, потому что этот метод делает Ajax-вызов нового URL, который отличается от прямого вызова в window.location.href

Вы пробовали этим методом:

$('div').live("pageshow", function()
{
   //your code
});

РЕДАКТИРОВАТЬ: Глядя на страницу JQuery Mobile, я увидел, что после изменения страницы происходит событие.

http://jquerymobile.com/test/docs/api/events.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...