2013-03-22 44 views
3

假设我在JQM Panel中有一个相当复杂的菜单,我需要它可以从应用程序中的每个页面访问。实现它的一种方法是将Panel代码复制并粘贴到每个子页面。jQuery Mobile Panel in static header

Approach 1 - The brutal way

这个工作。但是,它仅适用于使用简单面板的小型应用程序。 复制大块面板代码并应用于其他所有页面可能会非常麻烦,并且在稍后将更多页面加载到DOM时会出现性能问题。

所以我试图以另一种方式做到 - 自己操纵面板。 我点击pagecreate事件,并将面板放入加载的页面。 这样我可以保持我的DOM清洁,并始终处理一个面板。

Approach 2 - The wishful way

但没有奏效。在我强制将它从一个页面完全移动到另一个页面并致电pageContainer.trigger('refresh')pageContainer.trigger('create')后,它似乎没有重新启动自己。

所以我最终这样做了 - 将面板html保存为js变量,然后将面板html放入加载的页面中,而无需移除前一页面上的面板。这似乎工作。

Approach 3 - The compromise way

虽然这种方法并没有真正照顾在DOM只具有一个小组,至少我没有将它复制粘贴到每一个网页。

现在它可以工作,但我并不是那么满意。 我在这里发布这个问题,希望有人可以解释为什么方法2没有工作,这将真正让我的一天。

**我的应用程序是使用多页模板

干杯

回答

3

我使用这个代码

$(":jqmData(role='page')").bind("pagebeforeshow", function() { 
     $.mobile.activePage.find('#panel_menu').load("share/menu.html", 
      function(data) { 
       $.mobile.activePage.trigger("pagecreate"); 
      }); 
}); 
+0

这工作得很好。谢谢!我遇到列表过滤器显示错误的问题。正在处理... – jasonflaherty 2013-08-15 23:17:25

+1

刚发现你需要添加到CSS中:form.ui-listview-filter { margin:0; \t } – jasonflaherty 2013-08-15 23:21:11

1

较晚,但有第三条路

<div data-role="panel" id="mypanel"> 
    <!-- panel content goes here --> 
</div> 

<div data-role="page"> 
<!-- Blah blah blabh --> 
</div> 

,然后使用JavaScript的初始化。 $( “#mypanel”)面板()。

+0

在面板中有更多的jQuery Mobile元素(例如Listview),您需要使用'enhanceWithin()'方法链接'panel()'方法来增强它们:'$(“ #mypanel“)。面板()。enhanceWithin();' – 2014-08-18 08:05:33