1

我正在尝试在动态应用程序中构建一些自定义导航,所有屏幕都是从服务器获取的,因此我注册了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标志也是如此。

问候,

塞尔吉奥·洛佩斯

4

0 回答 0