0

我们正在使用 PhoneGap 和 Backbone.js 开发一个移动应用程序。为了使 Backbone 的路由器能够处理标签更改,所有教程都告诉您设置以下属性:

$.mobile.linkBindingEnabled = false;

虽然这对启用 Backbone 非常有效,但它现在会导致选择菜单出现错误。具体来说,我们想使用自定义样式的选择菜单弹出(与原生相反),但它不适用于该选项设置为 false。

自定义样式菜单

我正在寻找一种手动拦截此事件并显示自定义菜单的方法。我想到的第一件事是手动捕获点击并使用选择菜单的“打开”方法,但这不起作用。

我创建了一个 jsFiddle ( http://jsfiddle.net/tonicboy/zPS5j/ ) 来演示这个问题。当您第一次加载它时,您可以单击选择菜单,它将打开自定义样式菜单。如果将 linkBindingEnabled 切换为 false,它将不再起作用。

4

3 回答 3

1

首先,您的示例无法正常工作。我不会谈论主干问题,而是会尝试向您解释您的示例有什么问题以及这将如何导致 jQuery 出现问题。

linkBindingEnabled 是 jQuery Mobile 初始化设置的一部分,它必须在 jQuery Mobile 之前初始化,如下所示:

<script src="jquery.js"></script>
<script>
    $(document).on("mobileinit", function(){
        $.mobile.linkBindingEnabled = false;
    });
</script>
<script src="jquery-mobile.js"></script>

在此处阅读有关它的更多信息:使用 jQuery Mobile 的自动初始化

正确初始化后,linkBindingEnabledtrue还是false都没有关系。

这是一个正确的工作示例:http: //jsfiddle.net/JJ3Ds/

现在您可以使用此信息来解决您的项目问题。如果您使用 require.js 来处理初始化,您可以创建新的 js 文件,将所有内容放入其中(使用 mobileinit)并在 jquery mobile 之前对其进行初始化。

于 2013-04-24T09:19:36.870 回答
0

好的,我们似乎找到了解决方法。以前,我曾尝试使用 selectmenu 的 open 方法,例如:

$("#selectId").selectmenu("open");

但这不起作用,可能是因为它仍然依赖于 jQM 的点击处理。事实证明,当页面被渲染时,jQM 为每个选择菜单创建自定义菜单并将它们隐藏在屏幕外,并以#selectId-listbox的形式为它们提供一个 ID 。您可以使用弹出小部件以编程方式显示此菜单。

$("#selectId-listbox").popup("open");

不幸的是,由于我们现在必须处理所有点击处理任务,您必须手动捕获用户的选择,更新底层表单元素并关闭菜单。

于 2013-04-25T08:00:17.067 回答
0

gabrielschulhof 在这里给出了一个示例:

http://jsbin.com/sacota/4/

另见: https ://github.com/jquery/jquery-mobile/issues/7961

于 2015-02-13T08:53:22.763 回答