从 Dart 调用 js

Calling js from Dart

如何从 Dart 调用这样的代码?

$('.datepicker').datepicker();

我知道我可以使用 "package:js/js.dart" 包调用函数,就像这样

@JS("Plotly.plot")
external plot(DivElement element, List<PlotData> plotData, Margin margin);

...但是在元素上调用函数?

你问的不是 100% 清楚,但我认为你是在问如何在 JS 对象上调用任意方法。做到这一点并不容易(最好编写类型化接口)。您有两个选择:

  1. 使用 package:js/js_util.dart 并调用 callMethod.
  2. 写一个@JS()-annotated class你想要的。

对于第一个,你可以这样写:

import 'package:js/js_util.dart' as js;

void openDatePicker(Object elements) {
  js.callMethod(elements, 'datepicker', []);
}

...不是超级优雅(或打字很好),但它有效。如果您真的只需要调用一个方法,并且不期望调用其他方法或传递复杂的参数,我只建议这样做。

对于后者,您仍然可以使用@JS()技术。例如:

@JS()
external JQueryElements $(String selector);

@JS()
// Because this doesn't "really" align to a class in the JS/DOM.
@anonymous
abstract class JQueryElements {
  @JS()
  external void datepicker();
}

...您可以这样使用它:

void main() {
  $('.datepicker').datepicker();
}