如何在稳定的1.1.1 Dart中绑定JavaScript回调并在JavaScript中绑定Dart回调(Dart2Js2Dart)?

时间:2014-02-09 19:46:48

标签: dart dart-js-interop

我想写一些调用JavaScript函数“jsOnKey”的Dart函数“oKey”(由于无法预测,也有成功或异常)。

接下来我希望JavaScript函数“onKey”将调用Dart函数“callbackFromJs”再次将控制权返回给Dart(成功或异常)。

你能帮我解决这个问题吗?请在每个边框上假设 SUCCESS EXCEPTION - 我不能依赖第三方代码 - DART 2 JS 2 DART?


为了对这个一般性问题提供更多上下文,我放了示例代码。

import 'dart:html';

void onKey(Event event) {
  // I want to call something in javascript
  // function callbackFromDart () { 
  //  /* something */; 
  //  /* call callbackJs in Dart - return control to dart */
  // }
}

void callbackFromJs() {
  // It should be called from JavaScript
}

void main() {
  InputElement nameElement = querySelector('input[name=name]');
  nameElement..placeholder = 'Enter text'
      ..onKeyUp.listen(onKey);

  InputElement descriptionElement = querySelector('input[name=description]');
  descriptionElement..placeholder = 'Enter text'
    ..onKeyUp.listen(onKey);
}

1 个答案:

答案 0 :(得分:2)

首先看一下Using JavaScript from Dart

对于你的情况,你可以简单地传递回调来处理你所谓的 Js 2 Dart

import 'dart:js' as js;

void onKey(Event event) {
  onSuccess() {
    // Dart callback called from Js
  }
  onError() {
    // Dart callback called from Js
  }

  // assuming your js function takes 2 callbacks as parameters
  try {
    // in JS : function a() { throw "throw from js"; }
    js.context.callMethod('myTopLevelFunction', [onSuccess, onError]);
  } 
  catch (e) {
    print('js error catch on Dart side : $e');
  }
}

Dart异常可以在Js端捕获相同类型的代码。