2013-04-24 73 views
0

我们正在开发一个使用PhoneGap和Backbone.js的移动应用程序。为了使骨干路由器来处理包括hashtag的变化,所有的教程告诉你设置以下属性:

$.mobile.linkBindingEnabled = false; 

虽然这伟大工程,使骨干,现在造成的错误与selectmenu。具体而言,我们希望使用selectmenu弹出窗口的自定义样式(与本机相反),但它不适用于将该选项设置为false的情况。

custom style menu

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

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

回答

0

好的,我们似乎找到了解决方法。此前,我曾试图使用selectmenu的开放式方法,如:

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

但这并没有工作,可能是因为它仍然依赖于JQM的点击操作。事实证明,当页面呈现时,jQM为每个选择菜单创建自定义菜单,并将它们隐藏在屏幕外,给它们一个ID为#selectId-listbox。您可以使用popup widget然后以编程方式显示此菜单。

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

不幸的是,因为我们现在要处理所有点击处理业务,则必须手动捕获用户的选择,更新基本表单元素并关闭菜单。

+0

嗨!你能分享你的锻炼吗?我不能使用弹出功能。试图在jqeryMobile库里面搜索,太难理解了( – Sol 2014-01-15 19:54:05

+0

嘿,我已经更新了小提琴以更好地说明解决方案,让我知道你是否可以得到它的工作http://jsfiddle.net/tonicboy/8WxHx/ – 2014-01-15 20:50:09

+0

在你的小提琴屏幕中心弹出的画面。你有没有设法修复它?你是否要求“手动捕获用户的选择,更新底层窗体元素并关闭菜单”? – Sol 2014-01-15 21:44:19

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> 

了解更多关于在这里:​​Working with jQuery Mobile's Auto-initialization

当正确初始化它并不重要,如果linkBindingEnabled

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

现在你可以使用这些信息来修复您的项目的问题。如果您使用require.js来处理初始化,您可以创建新的js文件,将所有内容(使用mobileinit)并在jquery mobile之前初始化它。

+0

感谢有关的配置选项正确初始化的信息。但是,你太过于挂在小提琴上了(顺便说一下,这实际上证明了我所指的行为,无论出于何种原因)。 我们的实际代码确实在“mobileinit”事件上设置了自动初始化。如果我把$ .mobile.linkBindingEnabled = false;声明在那里,自定义选择菜单不再被破坏。所以我相信我最初的结论是它引起的问题仍然有效,因此我仍然需要一个解决方法。 – 2013-04-24 23:59:14

+0

这个小提琴工作的唯一原因是你没有围绕'$ .mobile.linkBindingEnabled = false;'用'$(document).on(“mobileinit”...'。因为你不禁用jQM的路由,它会没有与骨干一起工作,就像OP询问的那样。 – psyklopz 2014-09-20 15:42:12

相关问题