2016-07-28 9 views
0

Я хотел бы добавить страницу, содержащую компонент Google Maps, в мое приложение Luminus, но я не могу понять, как это сделать. Я попытался следовать за Reagent google maps guide, но карта не будет отображаться.Добавление карты Google Maps на страницу Luminus Reagent?

Это код Clojurescript, что я пробовал:

(ns test.maps 
    (:require [reagent.core :as r])) 

(defn home-render [] 
    [:div {:style {:height "300px"}}]) 

(defn home-did-mount [this] 
    (let [map-canvas (r/dom-node this) 
     map-options (clj->js {"center" (google.maps.LatLng. -34.397, 150.644) 
           "zoom" 8})] 
    (js/google.maps.Map. map-canvas map-options))) 

(defn map-page [] 
    [:script {:type "text/javascript" :src "https://maps.googleapis.com/maps/api/js?key=<mykey>"}] 
    [:div.container 
    [:div.row 
    [:div.col-md-12 
    (r/create-class {:reagent-render  home-render 
         :component-did-mount home-did-mount})]]]) 

Я сильно подозреваю, что это не правильный путь, чтобы добавить теги script.

Итак, мой вопрос: как добавить компонент Google Maps в приложение Lumius?

ответ

2

Переместить [:script {:type "text/javascript" :src "https://maps.googleapis.com/maps/api/js?key=<mykey>"}] на статическую страницу html, например, в Reagent example, к которому вы привязались.

Если вы заглянете в консоль разработчика своего браузера, вы, вероятно, получите app.js:337 Uncaught ReferenceError: google is not defined.

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

+0

Это сработало, когда я также удалил все «div» векторы. Знаете ли вы, почему я не могу разместить '(r/create-class ..)' в '[: div ..]' vector? – Johan

+0

@Johan Я думаю, что анализатор реагентов не может справиться с этим делом. Он ожидает только икоту или вызов другого компонента в квадратных скобках в шаблоне. –

+1

На самом деле я думаю, что это должно сработать нормально, вам просто нужно поместить его в правильную форму икоты, например: '[: div [(r/create-class ...)]]' –