2010-04-07 24 views
1

我正在使用MVC重構一個網站。什麼是一組與JavaScript,PHP,HTML等巨大的頁面正在成爲一系列的控制器和意見。我試圖以模塊化的方式做到這一點,所以視圖被拆分成'模塊',我可以在需要時在其他頁面中重複使用視圖如何使用window.onload?

例如。 「view/searchform只顯示一個帶搜索表格的div 」view/display_events顯示事件列表 等等。

其中一箇舊頁面應該加載帶有標記的谷歌地圖。

當中的代碼的其餘部分,我可以找到相關的位如下

<head> 
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;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來觸發該函數...(顯然,在我的視圖中沒有body標籤,在我的無知中我嘗試了div onload = ....但似乎沒有工作:)

你建議我做什麼? 我已閱讀關於window.onload,但不知道什麼是正確的語法。

請記住,頁面的其他部分包括其他在頁腳後調用的js函數(例如,google adsense)。

回答

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可能還提供了一種方法來附加加載事件,但我不熟悉它。

+0

我正在做一些實驗,我發現一個可能的解決方案(或者至少它似乎工作!:) 我已經移動了MAP div中的主腳本,然後在腳本本身的末尾添加了兩個更多行:load();調用函數和GUnload()。所以基本上被稱爲onload和onunload的函數被直接調用。 它似乎在工作,但我不知道如果這只是運氣,可以導致問題 - 你怎麼看? – Patrick 2010-04-07 15:48:09

+0

@Patrick,這可能是足夠的,取決於谷歌API實際上做了什麼。當你這樣寫時,腳本將在頁面加載完成之前執行(它們也將阻止加載直到它們完成執行)。通過將它放在加載事件上,地圖加載將異步完成。 – Joel 2010-04-07 16:13:16

+0

你的解決方案似乎工作喬爾。有沒有一種方法可以將整個腳本放在JS文件中並用腳本src ='...'調用它?我需要傳遞一些變量,上面的腳本是由php生成的 - 我該怎麼做? – Patrick 2010-04-07 17:03:08