Листовка с реакцией Clojurescript неправильно отображает плитки

Я пытаюсь использовать реактивную листовку из ClojureScript, но у меня проблема с отображением плитки:

  • некоторые тайлы не отображаются
  • плитки отображаются рядом друг с другом в разных городах

Вот код, который у меня есть:

(ns carder-devcards.map
  (:require [taoensso.timbre :as timbre]
            [cljsjs.react-leaflet] ;; js/ReactLeaflet
            )
  (:require-macros [devcards.core :as dc :refer [defcard]]))


(defn build
  ([component props]
   (build component props (array)))
  ([component props & children]
   (.createElement js/React
                   component
                   (clj->js props)
                   (array children))))


(def tile-layer (partial build js/ReactLeaflet.TileLayer))
(def leaflet-map (partial build js/ReactLeaflet.Map))
(def marker (partial build js/ReactLeaflet.Marker))
(def popup (partial build js/ReactLeaflet.Popup))



(defcard simple-leaflet
  (fn [state]
    (let [{:keys [pos zoom] :as st} @state
          tl (tile-layer {:url "http://{s}.tile.osm.org/{z}/{x}/{y}.png"
                          :attribution "&copy; <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors"})
          mk (marker {:position pos})]
      (leaflet-map {:center pos :zoom zoom}
                   tl
                   mk
                   )))
  {:pos [51.505, -0.09]
   :zoom 13}
  {:header true})

И вот результат у меня локально.

перепутанные плитки

Примечание: изменение размера браузера, похоже, имеет эффект, так что это также может быть проблемой css (?). Я попытался включить следующее без эффекта:

.leaflet-container {
  height: 400px;
  width: 100%;
}

person nha    schedule 13.07.2016    source источник


Ответы (2)


Ответ от @Chris Murphy поставил меня на правильный путь, так как у меня была такая же ошибка.

Оказывается, мне не хватало файлов css для leaflet.js, в том числе они решили мою проблему.

person nha    schedule 13.07.2016

Просто публикую свою очень простую первую листовку на случай, если она поможет:

(def URL-OSM "http://{s}.tile.osm.org/{z}/{x}/{y}.png")

(defn create-map []
  (let [m (-> js/L
              (.map "mapid2")
              (.setView (array -33.8675 151.2070) 9))       ;; Sidney
        tile1 (-> js/L (.tileLayer URL-OSM
                                   #js{:maxZoom     16
                                       :attribution "OOGIS RL, OpenStreetMap &copy;"}))
        base (clj->js {"OpenStreetMap" tile1})
        ctrl (-> js/L (.control.layers base nil))]
    (.addTo tile1 m)
    (.addTo ctrl m)))

Я использую [cljsjs/leaflet "0.7.7-4"].

Изменить А вот версия разметки для листовок:

(hiccup/html
  [:head
   [:meta {:charset "UTF-8"}]
   [:meta {:name "viewport" :content "width=device-width, initial-scale=1"}]
   [:link {:rel "stylesheet" :href "http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css" :type "text/css"}]
   [:script {:src "http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js" :charset "utf-8"}]
  [:body
   [:div {:id "mapid"}]
   [:div {:id "main-app-area"}]
   [:script {:src "/reconnect/js/main.js" :type "text/javascript"}]]) 
person Chris Murphy    schedule 13.07.2016
comment
Спасибо, ваш пример позволил мне воспроизвести ошибку без React.js - person nha; 14.07.2016