Jquery mobile 对话框上的“关闭”按钮返回到错误页面

Jquery mobile 对话框上的“关闭”按钮返回到错误页面,jquery-mobile,dialog,knockout.js,Jquery Mobile,Dialog,Knockout.js,这里有一把非常简单的小提琴: 如果单击标题栏中的“预设”按钮,将打开一个对话框。如果单击对话框上的“关闭”按钮,它将转到页面上的最后一页(对话框本身除外)(内容为的那一页是另一页)。怎么会?是否有办法修复自动插入的后退按钮,使其正常运行(如对话框中包含的“主页”按钮),或者,如果没有,是否有办法删除关闭按钮 <div data-role="page" id="index"> <header data-role="header"> <h1>In

这里有一把非常简单的小提琴:

如果单击标题栏中的“预设”按钮,将打开一个对话框。如果单击对话框上的“关闭”按钮,它将转到页面上的最后一页(对话框本身除外)(内容为
的那一页是另一页
)。怎么会?是否有办法修复自动插入的后退按钮,使其正常运行(如对话框中包含的“主页”按钮),或者,如果没有,是否有办法删除关闭按钮

<div data-role="page" id="index">
    <header data-role="header">
    <h1>Index</h1>
    <a href="#presets" data-icon="star" class="ui-btn-right" data-transition="pop" data-rel="dialog">Presets</a>
    </header>
    <article data-role="content">
        <div>This is the main page</div>
    </article>
</div>
<div data-role="page">
    This is another page
</div>
<div data-role="page" id="presets">
    <header data-role="header">
        <h1>Presets</h1>
        <a href="#index" data-icon="home" data-iconpos="notext"></a>
    </header>
    <div data-role="content">
        This is a dialog!
    </div>
</div>

指数
这是一个对话!
更新

正如Taifun指出的,问题在于页面上缺少id。添加id修复了我的第一把小提琴。然而,我的实际情况要复杂一点,如这把小提琴所示:

在这里,我实际上是使用knockout动态创建页面,并通过数据绑定为这些页面分配ID,但由于某种原因,jQuery Mobile似乎无法识别这些ID。如果您使用Firebug查看,您可以看到ID已正确添加到页面的属性中,但是当您关闭对话框时,您将进入第3页而不是原始页面

更新2

简单的修复,我只是在knockout将用作模板的html中添加了一个虚拟id:

<!-- ko foreach: pages -->
<div data-role="page" data-bind="attr: {id: name}" id="dummy">
    This is <span data-bind="text:name"></span>
</div>
<!-- /ko -->

这是


虚拟id被knockout替换,因此指向该页面的链接正常工作,jQuery mobile似乎很高兴

id
添加到其他页面

<div data-role="page" id="anotherpage">
    This is another page
</div>

这是另一页

然后它会起作用,请参见回到另一个解决方案,因为您提到:有办法删除关闭按钮吗?是的,只需添加此样式,另请参见


.ui对话框.ui标题a[数据图标=删除]{
显示:无;
}

还有一个演示

好的,这样就解决了我小提琴的问题,但是,当然,我真正的系统有点复杂。这些额外的页面是由knockout动态创建的,它们确实有ID,但jQuery Mobile似乎忽略了它们。这可能是另一个问题,它是由jquerymobile做它的事情和knockout做它的绑定的顺序引起的。好吧,我想我已经找到了一个解决方案。这既愚蠢又有黑客行为,但如果我只是在我的模板中添加一个假ID,那么jQuery mobile似乎会很高兴它能正常工作。Knockout将通过数据绑定到正确的id来替换id,但它似乎可以工作。再次感谢。我还没有试过,但我相信它可能会起作用。这种方法的唯一缺点是,如果jquerymobile的未来版本决定更改布局或类名,它可能会中断。
 <style>
   .ui-dialog .ui-header a[data-icon=delete] {
     display: none;
   }
 </style>