我正在尝试在动态应用程序中构建一些自定义导航,所有屏幕都是从服务器获取的,因此我注册了pagebeforechange事件并执行我自己的函数。
一切都按我的预期工作,除了当我刷新数据时我销毁动态页面并尝试使用页面 ID 再次调用我所在的页面,但是第二次,虽然我的代码为页面创建了 HTML,jQuery Mobile 抛出了一个" c.data("page") is undefined " 错误。
我绑定 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标志也是如此。
问候,
塞尔吉奥·洛佩斯