Jquery mobile losing formatting on a ul listview -
this listview element:
<ul data-role="listview" data-inset="true" id="acceptedcontent" data-theme="c"> </ul>
create process works fine first time through , listview looks supposed , appears working great:
$('#acceptedcontent').append('<li><a href="#info' + results.rows.item(i).infoid + '" data-transition="flow">' + results.rows.item(i).info + '</a></li>');
i call empty div, works , clears div out:
$('#acceptedcontent').empty();
refresh page ajax post, when data read database rebuild pages. list page loses formatting. call same function built page first time with.
rebuilding section data populated loose formatting
$('#acceptedcontent').append('<li><a href="#info' + results.rows.item(i).infoid + '" data-transition="flow">' + results.rows.item(i).info + '</a></li>');
any suggestions appreciated ive been @ feels days trying figure 1 out.
ive tried following along mucking around order of execution nothing got work, put following listview refresh after made append call in rebuild section:
$("#acceptedcontent").listview('refresh'); $("#acceptedcontent ul").listview('refresh');
thanks help.
okay, here's how :
you've got listview :
<ul data-role="listview" data-inset="true" id="acceptedcontent" data-theme="c"> </ul>
you've got data you'll loop through , format <li/>
. instead of appending multiple times, collect li
html in variable , append it, once :
var li = ""; //your loop, $.each, or for..in li += '<li><a href="#info' + results.rows.item(i).infoid + '" data-transition="flow">' + results.rows.item(i).info + '</a></li>'; //end of loop
so now, youve got data in 1 variable called li
. how use this? put in <ul/>
$('#acceptedcontent').html(li);
this way cut down use of empty
, append
. use html()
erase , re-write.
now comes important part. have refresh listview. you've got use listview("refresh")
, not in way you've done it. have wait html()
finish work. then, must use refresh
api, :
$('#acceptedcontent').html(li).promise().done(function () { //refresh here - $(this) refers ul here $(this).listview("refresh"); });
you've got buttons in there. in case can refresh using trigger
method. code :
$('#acceptedcontent').html(li).promise().done(function () { //refresh here - $(this) refers ul here $(this).listview("refresh"); //causes refresh happen on elements such button etc. lie inside ul $(this).trigger("create"); });
note : if error
uncaught error: cannot call methods on listview prior initialization; attempted call method 'refresh'.
change
$(this).listview("refresh");
to
$(this).listview().listview("refresh");
Comments
Post a Comment