2013-08-23 5 views
0

У меня есть приложение для простого подъема, которое пытается отобразить статически карту OpenLayers в ожидании наличия кометы, динамически добавляющей маркеры на карту на основе некоторой логики на стороне сервера. Во всяком случае, просто наличие карты вообще не является сложной задачей.Lift With OpenLayers Timing

HTML, выглядит следующим образом:

<!DOCTYPE html> 
<html> 
<head> 
<title>Test</title> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="description" content=""> 
<meta name="viewport" content="width=device-width"> 

<link rel="stylesheet" href="css/bootstrap.min.css"> 
<link rel="stylesheet" href="css/bootstrap-responsive.min.css"> 
<link rel="stylesheet" href="css/main.css"> 

<script src="js/vendor/modernizr-2.6.2-respond-1.1.0.min.js"></script> 
<script src="http://www.openlayers.org/api/OpenLayers.js"></script> 
<script> 
    function init() { 
    map = new OpenLayers.Map("mainMap"); 
    var mapnik   = new OpenLayers.Layer.OSM(); 
    var fromProjection = new OpenLayers.Projection("EPSG:4326"); // Transform from WGS 1984 
    var toProjection = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection 
    var position  = new OpenLayers.LonLat(-76.6778,39.2652).transform(fromProjection, toProjection); 
    var zoom   = 9; 

    map.addLayer(mapnik); 
    map.setCenter(position, zoom); 
    } 
</script> 
</head> 


<body class="lift:content_id=main" onload="init();"> 
<div id="main" class="lift:surround?with=bootstrap;at=content"> 
     <div id="mainMap"> </div> 
    </div> 
</body> 
</html> 

Я, очевидно, имея трудное понимание времени, когда подъемные сгенерированные элементы головы и тела поступают из после лифта: объемного звучания работал свою магию. Хотя статический HTML выглядит хорошо, уместные элементы скрипта исчезли, и, похоже, нет способа вызвать init(), чтобы отобразить карту.

Должен ли я каким-то образом переопределить обводку окружения, вообще не использовать его, или построить весь javascript init() в snippit, а затем вызвать его каким-то образом? Или что-то другое? Я немного приподнял новичок, поэтому, пожалуйста, несите меня, если я ухожу из базы;)

Еще одна вещь, которую я пробовал, - это добавить соответствующий код HTML/head/script в файле bootstrap.html, который я использую для окружения опубликованная страница, и это не дает мне, где я хочу быть.

Редактировать: Была (обычная) проблема кеширования, которая мешала мне увидеть изменения в файле bootstrap.html, указанном в лифте: suround snippit. Это действительно сработало.

+1

ли вы попробовать использовать '' тег внутри 'лифта: surround' сниппет? Это должно объединить содержимое внутри этого в раздел '' шаблона. – jcern

+0

Я пробовал . Я забыл включить это в вопрос, и для этого я извиняюсь. Проблема действительно двоякая: 1. Я не знаю, как работают сниппинг по умолчанию, которые заменяют HTML и , поэтому я не знаю, где, если где-нибудь переопределить его поведение. 2. Документация OpenLayers использует эксклюзивный атрибут «onload» для вызова JavaScript, который устанавливает карту. по-прежнему приводит к недавно созданному в сгенерированном HTML-коде, который поступает из Lift. – mephicide

ответ

0

Вы прочитали> 5 страниц о лифте? ... Когда вы вводите content_id = main, вы указываете Lift, чтобы игнорировать все, кроме внутренней части <div id="main">. Итак, чтобы все это работало, разместите <head_merge> со сценариями внутри <div id="main">.

http://simply.liftweb.net/index-2.1.html

http://demo.liftweb.net/templating/head

+0

Я знаю. И если вы действительно прочитали то, что я разместил, вы должны были заметить противоречие: , указанный в файле bootstrap.html, приведенный в качестве аргумента для подъема: объемный объем имел в нем уже