У меня есть страница, на которой я хочу отобразить некоторые точки на карте. У меня есть маленькие шаблоны (типа Smarty, но полегче) и там в шаблоне у меня есть переменная $points, состоящая из координат нужных мне точек. Мне нужно передать их в javascript (потому что только javascript может отображать эту карту с точками).
У меня есть 3 варианта как это сделать. Можете сказать, что лучше?
1-й способ: (Шаблон со вставкой javascript-тегов с глобальной переменной)
файл tpl.php:
<script>
MAP_POINTS = <?php echo json_encode($this->points); ?>;
</script>
.js-файл
function renderMap(){
var points = MAP_POINTS; // using global. Is it really bad? or who cares? =))
}
2-й способ: (передача переменной через элемент HTML)
tpl.php.файл
<input type="hidden"
value="<?php echo json_encode($this->points); ?>"
id="map_points_container">
.js-файл
function renderMap(){
// without globals, but needed to be parsed on local side
var points = $.parseJSON ( $( "#map_points_container" ).val() );
}
3-й способ: (способ AJAX)
Я вообще не передаю $this->points из файла шаблона. У меня есть другой файл .php, который обрабатывает все мои запросы AJAX:
Ajaxing.php
function get_map_points($params){
// some operations
return json_encode ($map_points);
}
И чем на локальной стороне у меня будет что-то вроде этого:
.js-файл
$.post ( 'ajaxing.php', params,
function(points){
renderMap(points);
}, 'json');
Третий способ обычный, но если я уже передаю какие-то значения из шаблона на локальную страницу, то могу передать и точки карты. На самом деле мне не нужно делать еще один запрос только для этой точки карты (поэтому я не люблю третий способ)
Но, может быть, вы посоветуете мне другой способ? лучший способ?
Способ, который я выбрал:
1-й способ с небольшими замечаниями. Весь мой код «рендеринга карты» находится в другом файле и выглядит примерно так:
$(function(){
MAP_APP = {};
MAP_APP.some_prop = null; // some properties
MAP_APP.some_method = function(){}; // some methods
});
Итак, в файле шаблона мне нужно только расширить свой объект MAP_APP:
<script>
MAP_APP.points = <?php echo json_encode($this->points); ?>;
</script>
Да, глобальная переменная. Но это как пространство имен всего приложения.
Спасибо всем.
correctnessкода. Я бы не хотел, чтобы мой код называли «странным», «необычным» или как-то еще;) - person Larry Cinnabar   schedule 07.06.2011