从Javascript数组创建Dart列表

时间:2012-11-28 06:16:31

标签: javascript dart

我正在尝试学习客户端Dart,它来自服务器端Java EE世界,我无法将数组从现有的JavaScript库转换为Dart List。

我试图通过构建uses Google Maps的Javascript Interop示例来学习。在Google Maps API's documentation中,DirectionsLeg对象的step属性返回。

  

DirectionsSteps数组,每个都包含有关此段中各个步骤的信息

如何将此var转换为Dart列表?我尝试过以下方法:

final List<maps.DirectionsStep> steps = List.from(directionsLeg.steps);

但Dart编辑告诉我cannot resolve method 'from' in class 'List'。我的进口是:

import 'dart:html';
import 'dart:core';
import 'package:js/js.dart' as js;

我做错了什么?是偶数还是我必须接受使用var

1 个答案:

答案 0 :(得分:7)

现在js-interop没有内置方法可以在返回js List时使用Dart Array

directionsLeg.steps会返回js.Proxy,其处理方式与js Array相同。您可以像这样迭代它:

final steps = directionsLeg.steps;
for (var i = 0; i < steps.length ; i++) {
  final step = steps[i];
  // do the job with step
}

如果您真的想使用飞镖List,可以将js.Proxy js Array转换为飞镖List,例如:

List<js.Proxy> convertToList(js.Proxy arrayProxy){
  final result = new List<js.Proxy>();
  for (var i = 0; i < arrayProxy.length ; i++) {
    result.add(arrayProxy[i]);
  }
  return result;
}

关于您的代码:

  • 您无法定义List<maps.DirectionsStep>maps.DirectionsStep不是类型,它是js js.Proxy上的google.maps.DirectionsStep(此外它并不存在 - 只有一个容器js object {})。
  • List.from(...):在这里,您尝试在Dart from对象上调用名为List的静态方法。这就是你得到错误的原因。 List.from实际上是一个工厂named constructor,必须与new关键字(new List.from(otherIterable))一起使用。