Sukūriau du puslapius su JQuery Mobile biblioteka, pridėjau kiekviename puslapyje sąrašą listview. Sąrašai yra dinamiškai generuojami. Tačiau pastebėjau, jei bandyti atnaujinti nematomą sąrašą su refresh metodu bus klaida: Uncaught cannot call methods on listview prior to initialization; attempted to call method 'refresh'
Paprastas sprendimas prieš atnaujinant sąrašą patikrinti su selektoriumi :visible, ar sąrašo elementas matomas. Šiame pavyzdyje du puslapiai ir kiekvienas su dinaminiu sąrašu, kuris atnaujinamas kai puslapis pasirodo.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1"> <title>ListView Test</title> <link rel="stylesheet" href="../css/jquery.mobile-1.0b1.css" /> <script type="text/javascript" src="../js/jquery-1.6.1.min.js"></script> <script type="text/javascript" src="../js/jquery.mobile-1.0b1.min.js"></script> <script type="text/javascript"> var list1 = list2 = ''; for(i=0;i<5;i++){ list1 += '<li><a href="#list" data-icon="arrow-r">item'+i+'</a></li>'; list2 += '<li><a href="#index" data-icon="arrow-r">item'+i+'</a></li>'; } $(document).bind("pageshow", function(){ if($("#list1:visible").length){ $('#list1').html(list1); $('#list1').listview('refresh'); } if($("#list2:visible").length){ $('#list2').html(list2); $('#list2').listview('refresh'); } }); </script> </head> <body> <div data-role="page" id="index"> <div data-role="content"> <ul data-role="listview" id="list1"> </ul> </div> </div> <div data-role="page" id="list"> <div data-role="content"> <ul data-role="listview" id="list2"> </ul> </div> </div> </html>
Arba priskirti sąrašo atnaujinimą puslapiui, kai jis pasirodo.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1"> <title>ListView Test</title> <link rel="stylesheet" href="../css/jquery.mobile-1.0b1.css" /> <script type="text/javascript" src="../js/jquery-1.6.1.min.js"></script> <script type="text/javascript" src="../js/jquery.mobile-1.0b1.min.js"></script> <script type="text/javascript"> var list1 = list2 = ''; for(i=0;i<5;i++){ list1 += '<li><a href="#list" data-icon="arrow-r">item'+i+'</a></li>'; list2 += '<li><a href="#index" data-icon="arrow-r">item'+i+'</a></li>'; } $(document).ready(function(){ $('#index').live('pageshow',function(event){ $('#list1').html(list1); $('#list1').listview('refresh'); }); $('#list').live('pageshow',function(event){ $('#list2').html(list2); $('#list2').listview('refresh'); }); }); </script> </head> <body> <div data-role="page" id="index"> <div data-role="content"> <ul data-role="listview" id="list1"> </ul> </div> </div> <div data-role="page" id="list"> <div data-role="content"> <ul data-role="listview" id="list2"> </ul> </div> </div> </html>