我正在使用MVC重构网站。什么是一组javascript,php,html等大页面正在成为一系列控制器和视图。我试图以模块化方式进行,因此视图分为“模块”,我可以在需要时在其他页面中重复使用
例如。 “view / searchform只显示搜索表单中的一个div “view / display_events显示事件列表 等等。
其中一个旧页面应该加载带有标记的谷歌地图。
在其余代码中,我可以识别相关位,如下所示
<head>
<script src="http://maps.google.com/maps?file=api&v=2&key=blablabla" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map"));
var point = new GLatLng(<?php echo ($info->lat && $info->lng) ? $info->lat .",". $info->lng : "51.502759,-0.126171"; ?>);
map.setCenter(new GLatLng(<?php echo ($info->lat && $info->lng) ? $info->lat .",". $info->lng : "51.502759,-0.126171"; ?>), 15);
map.addControl(new GLargeMapControl());
map.addControl(new GScaleControl());
map.addOverlay(new GMarker(point));
var marker = createMarker(point,GIcon(),"CIAO");
map.addOverlay(marker);
}
}
//]]>
</script>
</head>
...然后
<body onload="load()" onunload="GUnload()">
...最后这个div应该显示地图
<div id="map" style="width: 440px; height: 300px"> </div>
对js不太了解,但我的理解是
a)我必须在我正在编写的视图模块中包含脚本(直接在HTML中?我更愿意加载一个单独的脚本)
b)我必须使用相当于body onload来触发该函数...(显然我的视图中没有正文标记。在我的无知中我尝试了div onload = ....但似乎没有工作:)
你建议我做什么? 我已经阅读了window.onload,但不知道它的正确语法是什么。
请注意,页面的其他部分包含在页脚后调用的其他js函数(例如,google adsense)。
答案 0 :(得分:3)
您可以使用js将处理程序附加到窗口加载事件,因此您不需要标记。
// crossbrowser event binding from http://www.quirksmode.org/js/eventSimple.html
//function addEventSimple(obj,evt,fn) {
// if (obj.addEventListener)
// obj.addEventListener(evt,fn,false);
// else if (obj.attachEvent)
// obj.attachEvent('on'+evt,fn);
//}
// using Google API's event functions
GEvent.addDomListener(window, "load", load);
GEvent.addDomListener(window, "unload", GUnload);
function load() {
// your load function
}
将其放在视图的脚本标记中,并在加载窗口后调用加载函数。
谷歌API可能也提供了一种附加加载事件的方法,但我不熟悉它。