Dart JS interop для библиотеки с использованием jQuery

Я пытаюсь использовать пакет Dart: js для создания библиотеки взаимодействия для JScrollPane, которая обернута jQuery.

Вот что у меня есть на данный момент:

@JS()
library jscrollpane;

import 'dart:html';

import 'package:js/js.dart';

@JS()
@anonymous
abstract class JScrollPaneSettings {
    external factory JScrollPaneSettings({bool showArrows});

    external bool get showArrows;

    external set showArrows(bool value);

}

@JS()
class JScrollPane {
    external JScrollPane(Element element, JScrollPaneSettings settings);
}

И вот ошибка:

Not a valid JS object

STACKTRACE:
#0      JsNative.callConstructor (dart:js:1461)
#1      JScrollPane.JScrollPane (package:portal/base/views/scrollbar/jscrollpane.dart_js_interop_patch.dart:13:30)

А вот и библиотека JS - http://jscrollpane.kelvinluck.com/script/jquery.jscrollpane.js


person Sam B    schedule 13.04.2017    source источник


Ответы (1)


Element взят из dart:html и не помечен @anonymous, вместо него следует использовать ключевое слово dynamic.

@JS()
class JScrollPane {
  external JScrollPane(dynamic element, JScrollPaneSettings settings);
}

ОБНОВЛЕНИЕ

Поскольку это плагин jQuery, я не думаю, что у вас есть прямой доступ к JScrollPane, я никогда не оборачивал плагин jQuery, но если вы возьмете пример кода плагина:

$('.scroll-pane').jScrollPane();

Можно попробовать обернуть функцию $

@JS('\$')
external jQuery(query);

@JS()
@anonymous
class JScrollPaneElement {
  external jScrollPane();
}

void main() {
  JScrollPaneElement scrollPane = jQuery('.scroll-pane') as JScrollPaneElement;
  scrollPane.jScrollPane();
}
person Hadrien Lejard    schedule 14.04.2017