【问题标题】:When calling dart compiled Javascript from javascript how do I pass in a callback function into dart compiled Javascript?从 javascript 调用 dart 编译的 Javascript 时,如何将回调函数传递给 dart 编译的 Javascript?
【发布时间】:2014-05-08 17:25:00
【问题描述】:

我正在尝试逐步将我的项目转换为飞镖。我已将独立库转换为 Dart,并且在我的项目中使用 Dart 编译的 javascript。感谢my other question 的帮助。我可以调用 Dart 编译的 javascript 函数。现在我面临另一个难题。如果我的 Dart 函数需要回调,我如何将 Javascript 函数传递给 Dart 生成的 javascript 函数?

我要做的是从 Javascript 注册一个 Dart 事件处理程序,例如:

在我的 Dart 中,我有事件总线,dart 对象可以通过以下方式注册事件处理程序:

bus.on('eventName', callbackFunc);

Dart 对象通过以下方式触发事件:

bus.fire('eventName', data);

我通过以下方式将总线暴露给 Javascript 世界:

js.context['registerEvent'] = bus.on;

在Javascript中,我想调用

registerEvent('someEvent', function() { console.log('JS callback' });

注册一个事件处理器,当 Dart 对象触发事件时,会调用 JS 回调。

【问题讨论】:

    标签: dart dart-js-interop


    【解决方案1】:

    您可以尝试将其作为参数传递给 Dart 并使用 param.apply([]) 调用它

    【讨论】:

    • param.apply() 不起作用。未捕获的 NoSuchMethodError:无法在“#”上调用“apply$0”(对象 # 没有方法“apply$0”)
    • 试试param.apply([])
    【解决方案2】:

    从你之前的问题,

    js.context["sayGreeting"] = (message) {
      print("greeting: $message");
    };
    
    // pass js function which is already defined above.
    someJsObject.callMethod('someOriginalJsFunction', [js.context['sayGreeting']]);
    

    【讨论】:

    • 我在我的问题中添加了更多信息。您的方法将不起作用,因为 1. dart 不知道回调函数名称。 2. 可能根本没有函数名,比如问题中的内联函数。
    猜你喜欢
    • 2023-01-16
    • 2014-03-23
    • 2014-05-31
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2012-11-30
    • 2018-06-22
    • 1970-01-01
    相关资源
    最近更新 更多