我正在尝试在动态应用程序中构建一些自定义导航,所有屏幕都是从服务器获取的,因此我注册了 pagebeforechange 事件并执行我自己的功能。
一切都按照我的预期工作,除非我刷新数据时我会破坏动态页面并尝试使用页面ID再次调用我所在的页面,但这第二次,尽管我的代码为页面创建了HTML,jQuery移动设备抛出“ c.data(”page“)未定义”错误。
我绑定了pagebeforechange事件:
$(document).bind('pagebeforechange', function(e, data) {
if(typeof data.toPage === 'string') {
appobj.dynamicPage(data.toPage, data.options);
}
});
然后在dynamicPage方法中,我基于Underscore.js模板为我的页面创建HTML,让jQuery继续更改页面:
$.get('templates/page.tpl.html', function (data) {
html = _.template(data, { /* several template parameters */});
});
page = $(html);
page.appendTo('body').page();
我的想法是尽可能多地使用jQM,因为我正在创建目标页面并将其注入DOM。
当我需要更新支持数据时,我存储在localStorage中,我只是找到所有动态页面并销毁它们:
var current = $.mobile.activePage.attr('id');
$('.dynamicpage').remove();
$.mobile.changePage('#' + current
运行应用程序时,我可以轻松地在各种屏幕/页面之间导航,即使是在应用程序启动时不存在的页面,但是如果需要更新数据(因为用户在数据应用程序中添加了元素)数据库已更改)然后删除代码被执行,但旧页面没有重新生成,白色页面中隐藏了所有DOM内容,但我想导航的页面似乎也在DOM中(至少firebug告诉我)
如果我要重新开发,我可能会使用Backbone.js来处理我的模型更新并查看更改但是现在我只能使用jQM。有什么建议?我知道jQM找不到我的页面但是我不明白为什么我的事件应该被调用并且页面重新生成,即使设置了 allowSamePageTransition 标志。
此致
SérgioLopes