无法访问ember.js视图中的属性

时间:2012-02-23 10:34:25

标签: google-maps ember.js

我有一张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内设置任何其他属性,我就没有问题绑定它。关于如何解决这个问题的任何想法?

2 个答案:

答案 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属性,而不是类。