2013-04-20 26 views
0

我試圖將參數(gmap_settings)傳遞給包含的外部js文件中的函數(初始化)。我的PHP文件看起來是這樣的:將jquery變量定義爲超出範圍的函數

<?php 
$setting = array(
    'zoom' => 8 
); 

$json = json_encode($setting); 
?> 

<script type="text/javascript"> 
//<![CDATA[ 

jQuery(document).ready(function($) { 
    var gmap_settings = $.parseJSON ('<?php echo $json; ?>'); 
--> google.maps.event.addDomListener(window, 'load', $(document).initialize(gmap_settings)); 
}); 

//]]> 
</script> 

爲了簡便起見,可以說,外部的js文件看起來像這樣:

(function($) { 
    var initialize = function(data) { alert(data); }; 
})(jQuery); 

不管我怎麼努力我無法弄清楚如何將gmap_settings傳遞給initialize()。我試過功能initialize()在外部文件:

$(document).initialize.gmap_settings 
$(document).initialize({gmap_settings}) 
initialize(gmap_settings) 

我不明白我錯過了什麼。

+1

號的' var initialize'是一個* local *變量。這意味着你*不能從外部訪問它。 – Bergi 2013-04-20 20:24:54

+0

而不是嘗試解析一個非轉義的回聲JSON字符串,只需使用'var gmap_settings = <?php echo $ json; ?>;' – Bergi 2013-04-20 20:26:14

+0

'$(document).initialize'好像你正在嘗試[編寫一個插件] – user2264587 2013-04-20 20:28:00

回答

1

你爲什麼認爲$(document).initialize可以工作?

您可以實現在外部JavaScript文件模塊模式,並返回一個對象,並調用初始化對象

var YourModule = (function($) { 
    return { 
     initialize: function(data) { alert(data)} 
    }; 
})(jQuery); 

現在你有一個變量上,你可以使用

var newModule = Object.create(YourModule); 
newModule.initialize('This will be alerted') 
+0

這工作。這是一個插件將被寫入減$.fn(原型)相同的格式?儘管事實上我可以在最低級別的理解中工作,但原型的想法卻在我身上丟失了。 – brandonhowlett 2013-04-20 20:38:53

+0

@brandonhowlett idk javascript對我來說仍然是全新的。看起來你對基於'$ .fn.'的jquery插件感興趣。關於編寫jquery插件的最佳方法有很多博客文章 – dm03514 2013-04-20 20:44:06

+1

大約十年前,我是一名PHP開發人員,現在我發現自己爲一個個人項目準備了一些jquery,這很有趣。謝謝您的幫助! – brandonhowlett 2013-04-20 20:57:13