ANY*_*507 7 javascript google-maps callback ember.js
我正在尝试为Google地图创建Ember View,并按需加载脚本,即异步加载API.
我在视图中有两个函数,一个用于加载Google Maps API,另一个用于初始化地图.但由于Google要求我通过需要API的链接调用回调函数.但在Ember.JS,我无法得到正确的结果.所有我得到的是一条错误消息,说在尝试初始化地图时未定义对象"google".
这是现在的Ember视图代码.
App.MapsView = Ember.View.extend({
templateName: 'maps',
map: null,
didInsertElement: function() {
this._super();
this.loadGoogleMapsScript();
},
initiateMaps:function(){
var mapOptions = {
zoom: 8,
center: new google.maps.LatLng(-34.397, 150.644),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(this.$().get(0), mapOptions);
this.set('map',map);
},
loadGoogleMapsScript: function(){
var map_callback = this.initiateMaps();
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=map_callback';
document.body.appendChild(script);
},
Run Code Online (Sandbox Code Playgroud)
});
任何想法如何解决这个回调问题?而且,初始化地图的最佳方式是什么?它应该在模板中还是来自JS?
提前致谢.
这里有两个问题。一是您在这一行中调用您的函数:initiateMaps()
var map_callback = this.initiateMaps();
Run Code Online (Sandbox Code Playgroud)
此调用是在加载 Maps API 之前进行的,从而导致未定义的google错误。
另一个问题是map_callback该函数的局部问题。Maps API 脚本 URL 中使用的回调必须是全局函数。
(您自己解决了这个问题;我只是将其添加到此处,以方便将来的访问者。)
解决这两个问题的方法是将该行更改为:
var self = this;
window.map_callback = function() {
self.initiateMaps();
}
Run Code Online (Sandbox Code Playgroud)
可能有一种更“原生”的 Ember 方法可以做到这一点,但无论如何,这应该可以解决问题。
另外,由于您将 jQuery 与 Ember 一起使用,因此您可以替换以下代码:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=map_callback';
document.body.appendChild(script);
Run Code Online (Sandbox Code Playgroud)
和:
$.getScript( 'https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=map_callback' );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1866 次 |
| 最近记录: |