javascript - Ember.JS 路由与 Google map

标签 javascript google-maps ember.js zurb-foundation url-routing

我目前正在使用 Ember.JS 创建一个 Web 应用程序,它利用 Google map API 从 JSON 文件中提取位置。

但是,我认为本例中的问题与 Ember.JS 路由以及 JavaScript 的加载方式有关。如果我直接访问包含 map 的页面,例如:url.com/#/map,我将看到 map ,但如果我尝试离开此页面然后返回, map 就会消失。

是否必须在 Ember/App.js 中初始化代码,或者也可以在 .HTML 网站上完成吗?如果有话要说,我也使用 Foundation 作为响应部分。以下是我到目前为止的做法:

JavaScript:

<script>
    function initialize()
    {
        var mapProp = {
            center:new google.maps.LatLng(63.38, 15),
            zoom:5,
            mapTypeId:google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById("map_canvas"), mapProp);

        var markers = [];

        var infowindow = new google.maps.InfoWindow();

        for (var i = 0; i < locations.length; i++) {
            var marker = new google.maps.Marker({
                position: new google.maps.LatLng(locations[i][6], locations[i][7]),
                map: map,
                title: locations[i][0] + " -  " + locations[i][1] + ", " + locations[i][2] + " " + locations[i][3],
                icon: 'img/map_pin_xs.png'
            });

            google.maps.event.addListener(marker, 'mousedown', (function(marker, i) {
                return function() {
                    infowindow.setContent("<div style='height: 150px;'><span style='font-weight: bold;'>" + locations[i][0] + "</span><br /><span style='font-size: 15px'>" + locations[i][1] + "</span>" + "<br /><span style='font-size: 15px'>" + locations[i][2] + ", " + locations[i][3] + "</span>" + "<br /><a class='aCard' style='font-size: 13px;' target='_blank' href='tel:" + locations[i][4] + "'>" + locations[i][4] +"</a>" + "<br /><span style='font-size: 15px'><a class='aCard' target='_blank' href='" + locations[i][5] + "'>" + locations[i][5] +"</a></span>" + "<hr />" + "<span style='width: 100%'><a class='aCard' style='margin-left: 65px;' href='#' data-reveal-id='BookTime'>Book Time</a></span>" + "</div>");

                    infowindow.open(map, marker);
                }
            })(marker, i));

            markers.push(marker);
        }


        var mc = new MarkerClusterer(map, markers);
    }
    google.maps.event.addDomListener(window, 'load', initialize);
</script>

HTML:

<script type="text/x-handlebars" data-template-name="map">
    <div id="map_canvas" class="six columns" style="border-radius: 5px;"></div>
</script>

Ember.JS:

App.Router.map(function() {
    this.route('home', { path: '/'});
    this.route('map');
});

最佳答案

在 ember 中,每个 View 中都有 didInsertElement Hook 来执行这样的初始化工作。因此,为了使您的 map 正常工作,您应该定义一个 MapView 然后定义 Hook ,如下所示:

App.MapView = Ember.View.extend({
  didInsertElement: function() {
    // initialization work here
  }
});

希望有帮助。

关于javascript - Ember.JS 路由与 Google map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17442238/

相关文章:

ember.js - ember-data 中的适配器、夹具适配器和 REST 适配器之间有什么区别?

javascript - JS参数绑定(bind)不起作用

javascript - 使用javascript设置html文本颜色和大小

google-maps - Google PageSpeed 要求我对由 Google 托管的文件启用压缩

iphone - 如何向 Google map 上的信息窗口添加组合框和按钮?

javascript - 如何将简单的身份验证 session 注入(inject)适配器?

javascript - 使用 javascript 连接到现有的 sqlite 数据库

javascript - 无法自动刷新 HTML 中的两个表

javascript - Google map 数据类型抛出类型错误 : can't convert undefined to object

javascript - 在 Grails 项目中使用 EmberJS 和布局