Ember.js中的Google Maps

A23

我已经成功地在主页上显示了Google Maps。我对其中一个内页使用了相同的技术。

var MapView = Ember.View.extend({
    layoutName: 'pagelayout',
    didInsertElement : function(){
          var mapOptions = {
            center: new google.maps.LatLng(-34.397, 150.644),
            zoom: 8,
            mapTypeId: google.maps.MapTypeId.ROADMAP
            };
          var map = new google.maps.Map(this.$("#map").get(0),mapOptions);
          this.set('map',map); 
        },
        redrawMap : function(){
          var newLoc = new google.maps.LatLng(this.get('latitude'), this.get('longitude'));
          this.get('map').setCenter(newLoc)
        }.observes('latitude','longitude') 

}); 

但是,它不会渲染。如果我这样更改它,它可以工作,但会接管基本的html元素。

this.$().get(0) /**from this.$('#map').get(0)**/

我很沮丧。考虑到问题可能是didInsertElement触发得太早了(我了解到,此事件触发时,此View的整个DOM都可用),所以我尝试设置afterRender侦听器并触发了地图加载但这也失败了。我已经三重检查了div是否存在。

有人可以帮我吗?

A23

我从控制台运行了Google Maps初始化代码,并发现地图确实已加载,因此didInsertElement如何与我的设置配合使用似乎是一个问题。我的理解是,当View在DOM中时,didInsertElement被称为什么,但也许是因为我使用的是layouts,所以它的工作方式有所不同。

我通过在div本身内调用一个单独的视图来解决它

{{#view "map"}}

并为地图创建一个新的视图。

var MapView = Ember.View.extend({
 /**
 Same as before
**/
});

这只是我的解决方案,可能对面临相同问题的其他人很有用。如果有人有更好的解决方案,请添加它,以便我进行验证和支持。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章