1

Dart を使用して .czml ファイルをセシウム マップにロードしようとしています。JavaScriptコードは正しく機能し、次のようになります

    var viewer = new Cesium.Viewer('cesiumContainer');
    viewer.extend(Cesium.viewerDynamicObjectMixin);
    viewer.dataSources.removeAll();

    var czmlDataSource = new Cesium.CzmlDataSource();

    czmlDataSource.loadUrl('Vehicle.czml').then(function() {
        viewer.dataSources.add(czmlDataSource);
    });

これは私が使用しようとしている Dart に変換されたコードです。

    void drawCzmlStream() {    
        _viewer.callMethod('extend', [context['Cesium']['viewerDynamicObjectMixin']]);
        _viewer['dataSources'].callMethod('removeAll');

        var czmlDataSource = new JsObject(context['Cesium']['CzmlDataSource']);

        czmlDataSource.callMethod('loadUrl', ['Vehicle.czml']).then(displaySource(czmlDataSource));

        print("finished");
    }

    void displaySource(dataSource) {
        _viewer['dataSources'].callMethod('add', [dataSource]);
        print("finished displaying");
    }

コードは正しく実行されているようで、czml ファイル内のデータが読み込まれ、マップ上に描画され、「表示終了」が出力されます。ただし、print ステートメントの後にエラーがあり、2 番目の「finished」は表示されません。.then 呼び出しの使用方法に関係があると思われます。drawCzmlStream() を呼び出す CesiumController と共に AngularDart も使用しています。

これはコンソール表示です:

finished displaying

Undefined function drawCzmlStream

STACKTRACE:
#0      DynamicClosureMap.lookupFunction.<anonymous closure> (package:angular/core/parser/parser_dynamic.dart:51:11)
#1      CallMember.eval (package:angular/core/parser/eval_calls.dart:51:25)
#2      DynamicExpression.eval (package:angular/core/parser/dynamic_parser.dart:53:30)
#3      DynamicExpression.eval (package:angular/core/parser/dynamic_parser.dart:54:7)
#4      BoundExpression.call (package:angular/core/parser/syntax.dart:59:36)
#5      NgEvent.initListener.<anonymous closure> (package:angular/directive/ng_events.dart:154:39)
#6      _rootRunUnary (dart:async/zone.dart:734)
#7      _rootRunUnary (dart:async/zone.dart:735)
#8      _rootRunUnary (dart:async/zone.dart:735)
#9      _ZoneDelegate.runUnary (dart:async/zone.dart:462)
#10     _onRunUnary.<anonymous closure> (package:angular/core/zone.dart:114:63)
#11     VmTurnZone._onRunBase (package:angular/core/zone.dart:98:16)
#12     _onRunUnary (package:angular/core/zone.dart:114:17)
#13     _ZoneDelegate.runUnary (dart:async/zone.dart:462)
#14     _CustomizedZone.runUnary (dart:async/zone.dart:667)
#15     _BaseZone.runUnaryGuarded (dart:async/zone.dart:582)
#16     _BaseZone.bindUnaryCallback.<anonymous closure> (dart:async/zone.dart:608)
4

1 に答える 1

2

ありがとうベンジャミン、あなたの提案は正しかった。これが最終的なダーツコードです。

  void drawCzmlStream() {    
      _viewer.callMethod('extend', [context['Cesium']['viewerDynamicObjectMixin']]);
      _viewer['dataSources'].callMethod('removeAll');

      var czmlDataSource = new JsObject(context['Cesium']['CzmlDataSource']);
      var loaded = czmlDataSource.callMethod('loadUrl', ['../czml/Vehicle.czml']);
      loaded.callMethod('then', [(_) => displaySource(czmlDataSource)]);

      print("finished");
  }

  void displaySource(dataSource) {
    _viewer['dataSources'].callMethod('add', [dataSource]);
    print("finished displaying");
  }
于 2014-05-15T18:53:26.123 に答える