【问题标题】:How to bind JavaScript callback in stable 1.1.1 Dart and bind Dart callback in JavaScript (Dart2Js2Dart)?如何在稳定的 1.1.1 Dart 中绑定 JavaScript 回调并在 JavaScript (Dart2Js2Dart) 中绑定 Dart 回调?
【发布时间】:2014-03-07 00:14:37
【问题描述】:

我想写一些 Dart 函数“oKey”,它调用 JavaScript 函数“jsOnKey”(成功或异常,因为无法预测)。

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

你能帮我完成这个完整的流程吗?请在每个边界上假设 SUCCESSEXCEPTION - 我不能依赖第 3 方代码 - 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);
}

【问题讨论】:

    标签: dart dart-js-interop


    【解决方案1】:

    先看看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 端用同种代码捕获。

    【讨论】:

    • 不是回答。调用链是 Dart 2 Js 2 Dart(不是 Dart 2 Js)。问题是如何处理 Dart 中的 JavaScript 异常和 JavaScript 中的 Dart 异常(不是 onSuccess,onError)。
    • 如果您按照我的示例进行操作,则有 dart 到 js 调用(调用 myTopLevelFunction js 到 Dart 调用(当从 js 调用回调时)。
    • 让我们检查您的答案是否准备就绪:1. d2js 完成,2. d2js 异常 - 部分完成 - 未显示如何捕获特定异常类型。 3. js2d - 完成(我想象代码)。 4. js2d 异常 - 未完成(未捕获特定异常的代码)。 50% 完成(只剩下异常类型)。
    • 请提供如何捕获特定的异常类型以使您的答案非常好 - 我会给它打分,很多人会感谢您展示捕获 已知 异常类型并捕获 任何/未知异常。
    • 我同意,这不能回答问题。你不能期望总是传递一个回调来调用 Dart 函数。它应该可以直接调用......而且我不知道在哪里。非常令人沮丧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2015-09-25
    • 1970-01-01
    • 2018-07-28
    • 2019-04-25
    • 2014-11-03
    相关资源
    最近更新 更多