从Dart监听JavaScript事件

3

在Dart中,有没有一种方法可以监听来自JavaScript库的事件?

例如,jqrangeslider http://ghusse.github.io/jQRangeSlider/ 包在某人释放滑块时会发出userValueChanged事件。

通过js/js.dart包在Dart中监听该事件是否容易?

很想看到Dart中监听来自JavaScript库的此类事件的侦听器示例。

1个回答

4

感谢js包,您可以处理几乎所有的js代码。以下是相应javascript代码片段的dart版本:

$("#slider").bind("valuesChanged", function(e, data){
  console.log("Will be executed");
});

在Dart中:
js.scoped((){
  js.context.jQuery("#slider").bind("valuesChanged", new js.Callback.many((e, data) {
    print("Will be executed");
  }));
});

请注意,我使用的是jQuery而不是$,因为否则你会遇到与dart2js相关的问题(请参见issue 2265)。
基本上,在JS中使用回调函数时,您必须使用js.Callback.manyjs.Callback.once来包装您的回调。有关更多详细信息,请参见管理回调生命周期

当我按照你建议的方法使用 jQuery 时,我收到了这个错误:类 'Proxy' 没有定义 'jQuery' 方法。有什么建议吗?附言:如果我使用 $,会出现相同的错误 :-( - Softinio
这只是一个警告,将在接下来的几天内消失。然而,代码应该能够正常工作。 - Alexandre Ardhuin
代码无法正常工作。我将其发布为答案,如果您能指导我正确的方向,那将太棒了。谢谢。 - Softinio
你不会忘记加载jquery.js了吧? - Alexandre Ardhuin
我做了,这是详细信息:http://stackoverflow.com/questions/18639922/using-jqrangeslider-with-dart-js-interop-does-not-work - Softinio
@AlexandreArdhuin。现在js包中没有scoped(),bind()或Callback.many()。它们被移除了吗?那么现在应该使用什么呢?谢谢。 - Nawaf Alsulami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接