@Araq thank you for help. I tried to wrap my map container into component. 
Unfortunately I make something wrong:
    
    
    include karax / prelude
    import karax / vstyles
    import dom
    import jsffi except `&`
    
    var
        errmsg = kstring""
        console* {. importc, nodecl .}: JsObject
        H* {. importc, nodecl .}: JsObject
    
    type Credential* = ref object of JsObject
        app_id*, app_code*: cstring
    
    
    
    type MapComponent* = ref object of VComponent
        app_id: cstring
        app_code: cstring
    
    proc renderMap(x: VComponent): VNode =
        echo "start renderMap"
        let self = MapComponent(x)
        let style = style(
            (StyleAttr.height, cstring"600px"),
            (StyleAttr.width, cstring"800px"))
        
        result = buildHtml(tdiv(class="mapContainer", style=style)):
            discard
    
    
    proc newMap*(): MapComponent =
        result = newComponent(MapComponent, renderMap)
    
    
    proc createDom(): VNode =
        result = buildHtml(tdiv):
            button:
                proc onclick(ev: karax.Event; n: VNode) =
                    errmsg = ""
                text "Click me to reproduce error. See in developer tool of 
browser"
            tdiv:
                newMap()
            text errmsg
    
    proc preRender() =
        let headEl = document.getElementsByTagName("head")[0]
        let mapCoreJs = document.createElement("script")
        let mapSrvJs = document.createElement("script")
        let mapEvtJs = document.createElement("script")
        mapCoreJs.setAttribute("src", 
"http://js.cit.api.here.com/v3/3.0/mapsjs-core.js";)
        mapSrvJs.setAttribute("src", 
"http://js.cit.api.here.com/v3/3.0/mapsjs-service.js";)
        mapEvtJs.setAttribute("src", 
"http://js.cit.api.here.com/v3/3.0/mapsjs-mapevents.js";)
        headEl.appendChild(mapCoreJs)
        discard window.setTimeout(proc () =
                headEl.appendChild(mapSrvJs)
                headEl.appendChild(mapEvtJs)
            , 500)
    
    
    
    proc postRender() =
        
        proc initMap() =
            var platform = jsnew H.service.Platform(Credential{ app_id: 
"LCaupECE0hjCyyaVoSBt", app_code: "laFQjWV5ZXkULYYFcXieJw" })
            var defaultLayers = platform.createDefaultLayers()
            let map = jsnew H.Map(
                document.querySelector(".mapContainer"),
                defaultLayers.normal.map)
            var behavior = jsnew H.mapevents.Behavior(jsnew 
H.mapevents.MapEvents(map))
            map.setZoom(2)
        
        
        discard window.setTimeout(initMap, 1000)
    
    
    preRender()
    setRenderer(createDom, clientPostRenderCallback = postRender)
    

compiled with _tool/karun_

Reply via email to