ClojureScript + OpenLayers

Я пытаюсь переписать пример использования OpenLayers с ClojureScript.

Исходный код Javascript выглядит так:

var map, layer;
map = new OpenLayers.Map('map');
layer = new OpenLayers.Layer.OSM("Simple OSM Map");
map.addLayer(layer);

var projection = new OpenLayers.Projection("EPSG:4326");
var center = new OpenLayers.LonLat(-71.147, 42.472).transform(projection, map.getProjectionObject());
map.setCenter(center, 12);  

Я переписал этот код следующим образом:

(ns hello.map)
  (def mapp (.Map js/OpenLayers "map"))
  (def layer (.Layer.OSM js/OpenLayers "Simple OSM Map"))
  (.addLayer mapp layer)

  (def projection (.Projection js/OpenLayers "EPSG:4326"))
  (def center (.Transform (.LonLat js/OpenLayers -71.147 42.472) projection (.getProjectionObject mapp)))
  (.setCenter mapp center 12)

Лейн сгенерировал следующий код:

var hello = {map:{}};
hello.map.mapp = OpenLayers.Map("map");
hello.map.layer = OpenLayers.Layer.OSM("Simple OSM Map");
hello.map.mapp.addLayer(hello.map.layer);
hello.map.projection = OpenLayers.Projection("EPSG:4326");
hello.map.center = OpenLayers.LonLat(-71.147, 42.472).Transform(hello.map.projection, hello.map.mapp.getProjectionObject());
hello.map.mapp.setCenter(hello.map.center, 12);
hello.hello = {};

И это не работает. Так проблема в том, что ClojureScript генерирует код без new или может что-то еще?


person Stepan Kuzmin    schedule 27.04.2012    source источник
comment
Я не могу точно сказать, но вы сначала создали объект js, который вам нужен, в вашем cljs?   -  person georgek    schedule 27.04.2012


Ответы (1)


Да, ваши вызовы конструктора нуждаются в исправлении:

(ns hello.map)

(def mapp (js/OpenLayers.Map. "map"))
(def layer (js/OpenLayers.Layer.OSM. "Simple OSM Map"))
(.addLayer mapp layer)

(def projection (js/OpenLayers.Projection. "EPSG:4326"))
(def center (.transform (js/OpenLayers.LonLat. -71.147 42.472)
               projection (.getProjectionObject mapp)))
(.setCenter mapp center 12)

непроверенный, но вы должны получить идею. Обратите внимание на разницу между созданием экземпляров и вызовом методов для экземпляров.

person dnolen    schedule 01.05.2012