我有一张Google地图的视图,我想让它公开地图,以便我可以从另一个对象绑定它。问题是因为我只能在didInsertElement
上实例化地图(直接实例化它将无法工作,因为div尚未渲染)我无法访问地图的真实值(它总是返回null)。
这是我的代码:
Places = Ember.Application.create();
Places.MapView = Ember.View.extend({
tagName : 'div',
map : null,
didInsertElement : function() {
this._super();
this.set('map', new google.maps.Map($('#map').get(0), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(-33.8665433,151.1956316),
zoom: 15
}));
this.get('map'); // Returns the value of the map OK
}
});
Places.searchController = Ember.Object.create({
mapBinding: 'Places.MapView.map' // Doesn't work
}
这是模板:
<script type="text/x-handlebars">
{{#view Places.MapView id="map"}}{{/view}}
</script>
如果我直接在MapView
内设置任何其他属性,我就没有问题绑定它。关于如何解决这个问题的任何想法?
答案 0 :(得分:5)
在我的控制器中,我通常绑定到“模型”对象而不是视图对象。
也许尝试将地图设置为其他对象。
Places = Ember.Application.create();
Places.MapData = Ember.Object.create({
map: null
});
Places.MapView = Ember.View.extend({
tagName : 'div',
map : null,
didInsertElement : function() {
this._super();
Places.MapData.set('map', new google.maps.Map($('#map').get(0), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(-33.8665433,151.1956316),
zoom: 15
}));
}
});
Places.searchController = Ember.Object.create({
mapBinding: 'Places.MapData.map'
});
答案 1 :(得分:1)
在searchController
中,您绑定了MapView
类 的地图属性。该类没有map属性。实例化类并运行didInsertElement
后,地图属性将添加到MapView
实例 。要使绑定工作,您需要绑定到实例化视图的map属性,而不是类。