在用Grails做一个Web plugin的时候遇到一个问题,当我从A页面中的链接跳转到B页面时,B页面中编写的Java Script无法加载,具体如下:
1、在A页面中用<g:createLink>来生成一个链接
<body>
<div data-role="page" data-theme="c">
<div data-role="header" data-theme="b">
<a href="<g:createLink
controller="mobileConfig" action="launchConfig"/>" data-icon="gear" data-iconpos="notext" class="ui-btn-left" data-mini="true">Configuration</a>
<h1 class="igt-title">${skin.code}: GameList</h1>
<a href="<g:createLink controller="mobileLogin
" action="logout
"/>" data-icon="delete" data-iconpos="notext" class="ui-btn-right" data-mini="true">Logout</a>
</div>
……
2、当点击“Configuration”时,Grails框架自动跳转到指定的“launchConfig”页,在该页的js中用jQuerymobile定义了页面中某一select的事件
<script type="text/javascript"> $(document).ready(function(){ $("#forcePosition").change(function() { var posName=$("#forcePosition option:selected").text(); setPosition($(this).val(),posName); }); $('#location-status-select').change(function() { var message = $("#location-status-select option:selected").text(); $('#locationstatus').val($(this).val()); $('#locationmessage').val(message); }); $('#ipaddress-select').change(function() { $('#ipaddress').val($(this).val()); }); }); function setPosition(pos,posName) { $('#position').val(posName); var postion = pos.split(','); [].slice.call(document.querySelectorAll("#latitude,#longitude"),0).forEach( function(e,i) { e.value = postion[i] || ''; } ); } </script>
3、从上一页跳转到当前页时,该段js并未加载,此段js放置在</body>标签之外;
4、用firefox firebug及chrome等工具进行调试并未发现错误,只是当前页的js并未加载,刷新后才加载,后来发现,B页面的<page>标签页下的内容被加载了进来,且A页面的内容仍然存在当前的request中,也就是说从A跳转到B页面时并未重新发送请求,只是将B页面中的<page>标签内容加载到了当前的请求中,一开始js放置在</body>之外,所以无法加载;
5、将js放置在<page>标签内,问题解决
总结:这个问题的出现有可能和Grails的跳转机制有关,但由于同时使用了Jquerymobile,所以还需要进一步确认,初步估计前一个因素的可能性较大。