6

サーバー側の Java EE の世界から来て、クライアント側の Dart を学習しようとしていますが、既存の JavaScript ライブラリの配列を Dart List に変換するのに問題があります。

Google Mapsを使用する Javascript Interop の例に基づいて構築することで学習しようとしています。Google のMaps API のドキュメントでは、DirectionsLegオブジェクトのstepプロパティが返されます。

それぞれがこの区間の個々のステップに関する情報を含む DirectionsSteps の配列

varこれを Dart Listに変換するにはどうすればよいですか? 私は次のことを試しました:

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

しかし、Dart Editor は教えてくれcannot resolve method 'from' in class 'List'ます。私のインポートは次のとおりです。

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

私は何を間違っていますか?それは可能ですか、それとも を使用して受け入れる必要がありvarますか?

4

1 に答える 1

8

今のところ、jsが返されたときにDart を使用する組み込みの方法はjs-interopにありません。ListArray

directionsLeg.stepsjs.Proxyjs のように処理する a を返しますArray。次のように繰り返すことができます:

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

本当に Dart を使用したい場合は、次のような方法で jsを Dart にList変換できます。js.ProxyArrayList

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.Proxyjs 上のgoogle.maps.DirectionsStepものです (さらに、実際には存在しません - コンテナー js オブジェクトのみ{}です)。
  • List.from(...)from: ここでは、 DartListオブジェクトで名前が付けられた静的メソッドを呼び出そうとします。そのため、エラーが発生します。実際にはコンストラクターという名前List.fromのファクトリであり、キーワード ( )と共に使用する必要があります。newnew List.from(otherIterable)
于 2012-11-28T07:18:41.150 に答える