我正在使用Dart中的js库来访问OpenLayers。相关代码如下:
js.scoped(() {
ol = js.retain(js.context.OpenLayers);
var max_extent = new js.Proxy(ol.Bounds, -13652354.432172, 6026153.418145, -13574082.915218, 6065289.1766216);
var restricted_extent = max_extent;
if (controls == null){
var options = js.map ({
'maxExtent': max_extent,
'restrictedExtent' : restricted_extent,
'units' : 'm',
'projection': new js.Proxy(ol.Projection, 'EPSG:900913'),
'displayProjection' : new js.Proxy(ol.Projection, 'EPSG:4326'),
'controls' : js.array([ new js.Proxy(ol.Control.Attribution),
new js.Proxy(ol.Control.Navigation),
new js.Proxy(ol.Control.ArgParser),
new js.Proxy(ol.Control.PanPanel),
new js.Proxy(ol.Control.ZoomPanel)
])
});
_treemap = js.retain( new js.Proxy( ol.Map, map_div_id, options ) );
}
var roads = new MapLayer(ol, layer_type:'road').layer;
var aerial = new MapLayer(ol, layer_type:'hybrid').layer;
_treemap.addLayers(js.array([roads, aerial]));
_treemap.setBaseLayer(roads);
_treemap.zoomToMaxExtent();
var result = _treemap.layers();
});
除最后一行外,所有工作都按预期工作。 _treemap.layers()
应该返回OpenLayer.Layer
数组。当该行执行时,我收到一个错误:
异常:TypeError:Object [object Array]没有方法'apply'
那么,在我的Dart代码中从javascript函数获取/处理返回值的正确方法是什么?
答案 0 :(得分:1)
layers
是一个数组(请参阅OpenLayers.Map.layers)。所以你应该使用:
var result = _treemap.layers;
使用_treemap.layers()
,您试图调用layers
因为它是一个函数。
关于您的代码的一个注意事项:当您使用js.map({})
时,您不需要在对象树中使用js.array
或js.map
。您可以简单地提供类似 JSON 的结构。
var options = js.map ({
'maxExtent': max_extent,
'restrictedExtent' : restricted_extent,
'units' : 'm',
'projection': new js.Proxy(ol.Projection, 'EPSG:900913'),
'displayProjection' : new js.Proxy(ol.Projection, 'EPSG:4326'),
'controls' : [ new js.Proxy(ol.Control.Attribution),
new js.Proxy(ol.Control.Navigation),
new js.Proxy(ol.Control.ArgParser),
new js.Proxy(ol.Control.PanPanel),
new js.Proxy(ol.Control.ZoomPanel)
])
});