jQuery Mobile - 不改变哈希值的对话框

时间:2011-10-14 18:31:53

标签: dialog jquery-mobile

我有一个搜索对话框,我正在弹出并填充jquery模板。在他们做出选择后,我在当前页面上设置了一个值。因此我不需要hashTag或类似的东西,我只需要一个弹出式对话框,我可以以编程方式打开和关闭。我目前正在用

打开对话框
$.mobile.changePage(dialog, { transition: "slide", changeHash: false });

并用

关闭它
dialog.dialog('close');

但是,在某些情况下(当页面导航到的时候),关闭对话框会刷新当前页面。

有没有更好的方式与此互动?

更新

我想我弄清楚发生了什么。因此,出于某种原因,jquery mobile通常会在DOM上加载2个页面 - 其中一个是不可见的,您可以通过在控制台中运行$('[data-role = page]')来验证这一点。一页是您所在的页面,另一页是您最初导航到的页面。不太清楚他们为什么选择这样做,但你有它。

因此,即使对话框已经在DOM中,它们也将对话框视为具有不同转换的页面导航。因此,如果直接转到页面然后触发对话框,修改当前页面并关闭它可以正常工作 - 因为原始页面始终加载在DOM中。但是,如果您转到另一个页面,而不是导航到触发对话框的页面,然后触发对话框,它会销毁当前页面,以便DOM中的页面是初始页面和对话框。在这种情况下,它会完全重新加载对话框启动页面,您永远不会有机会进行任何修改。

哎呀。我如何直接与jqm对话框小部件进行交互?

3 个答案:

答案 0 :(得分:1)

你可以尝试另外两件事。两者都应该有效:

1集DomChache
如何重写JQM以保持页面在DOM中触发对话框?文档说您可以设置data-dom-chache并覆盖从DOM清除页面。

如果只是在通过AJAX加载此页面时(而不是直接加载),您可以在拥有data-page-external的触发页面上保持DOM依赖,仅在分配DOM-chache =“true”时对话框打开并在对话框关闭后再次将其删除。

2覆盖JQM
我遇到了你描述的同样的问题并让它像这样工作(虽然需要攻击JQM ......):

// inside transitionPages function
if ( !$(toPage).jqmData('internal-page') 
    {fromPage.data( "page" )._trigger( "hide", null, { nextPage: toPage } );}
    }

我的问题是,页面切换到某些页面(与对话框相同)导致前一页面(从中触发对话框)从DOM中删除,因此我有一个空白屏幕(当试图返回时)。我在页面中添加了data-internal-page =“true”,这应该保持前一页完整,并在JQM中添加了if子句。

所以现在pageHide(和DOMcleanup)只会触发,如果我没有去到标有data-internal-page="true"的页面

干杯!

答案 1 :(得分:1)

我想我遇到了类似的问题。我想要做的是基于某些参数,在加载时弹出一个对话框窗口(在同一页面上显示该内容),他们可以关闭它并查看加载的页面。

我可以使用load或pageshow事件来加载弹出窗口,但是当我单击关闭时会将您发送回历史记录中的上一页,而不是仅关闭对话框。

//target your 1st page content, here its id=success
//the modal content is in a page id=dialog and data-role="dialog"

$('#success').live('pageshow',function(){
    window.setTimeout(function(){
        $.mobile.changePage('#dialog','pop',false,false);
    },1);
}

它是一个hack,只是允许页面加载击败对话框,因此它被卡在历史记录中。然后,对话框的默认对话框关闭行为按预期方式工作。谈论一个PITA,如果他们为JQuery UI对话更多一点,它会让事情变得更容易。

答案 2 :(得分:0)

关于你的问题:你看过Jquery Mobile Actionsheet plugin

吗?

如果你真的不需要加载页面,那应该没问题。

同样有用的可能是Cagintranet iPad popover,尽管您必须将设计调整为移动设备上的全屏设计。如果你需要CSS / Jquery这样做让我知道(我在JQM插件中使用它我正在写)

希望有所帮助。