импортировать файл js в шаблон html ngComponent

У меня есть компонент, который взаимодействует с библиотекой JS:

@NgComponent (селектор: 'mapcomp', templateUrl: 'packages/org_rtosm_update/map/map.html', cssUrl: 'packages/org_rtosm_update/map/map.css', publishAs: 'mapComponent') class MapComponent { final map = new js.Proxy(js.context.OpenLayers.Map, "карта");

когда я включаю библиотеку JS в файл шаблона HTML следующим образом:

<script src="packages/browser/interop.js"></script>
<script type="text/javascript"src="http://openlayers.org/dev/OpenLayers.js"></script>
<h3>Maps</h3>
<div id="map" class="smallmap"></div>

У меня ошибка прокси:

Class 'Proxy' has no instance getter 'OpenLayers'. NoSuchMethodError: method not found: 'OpenLayers' Receiver: Instance of 'Proxy' Arguments: [] STACKTRACE: #0
Object.noSuchMethod (dart:core-patch/object_patch.dart:45) #1
Proxy.noSuchMethod (package:js/js.dart:222:27) #2
MapComponent.MapComponent (package:org_rtosm_update/map/map_component.dart:15:39) #3 
_LocalClassMirror._invokeConstructor (dart:mirrors-patch/mirrors_impl.dart:873) #4
_LocalClassMirror.newInstance (dart:mirrors-patch/mirrors_impl.dart:789) #5
 DynamicInjector.newInstanceOf (package:di/dynamic_injector.dart:64:35) #6
_TypeProvider.get (package:di/module.dart:151:29) #7
 Injector._getInstanceByKey (package:di/injector.dart:116:27) #8
 Injector._getInstanceByKey (package:di/injector.dart:120:7) #9
 Injector.get (package:di/injector.dart:170:24) #10
_ComponentFactory.call (package:angular/core_dom/view_factory.dart:213:68)

каков наилучший способ иметь независимый компонент с ресурсами JS?

Благодарю.


person mackristof    schedule 01.04.2014    source источник


Ответы (1)


Ваша конкретная проблема связана с вызовом js.context.OpenLayers.Map, чтобы получить доступ к свойствам JSObjects, используйте оператор []. например js.context['OpenLayers']['Карта'].

Использование js-interop будет работать, но оно не очень надежно, и вы потратите много времени на написание Javascript через Dart, что не очень весело.

Лучший подход — обернуть внешнюю библиотеку Javascript в библиотеку Dart. Взгляните на генератор оболочки @a14n: https://github.com/a14n/dart-js-wrapping-generator, который используется для создания привязок Google Map: https://github.com/a14n/dart-google-maps

person James deBoer    schedule 03.04.2014