如何使用Dart的JS互操作创建匿名JavaScript函数/回调? [英] How do I create an anonymous JavaScript function/callback with Dart's JS interop?

查看:129
本文介绍了如何使用Dart的JS互操作创建匿名JavaScript函数/回调?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Dart及其 JS互操作 。我需要将以下JavaScript代码转换为Dart:

I am using Dart and its JS interop. I need to convert the following JavaScript code to Dart:

ID3.loadTags("filename.mp3", function() {
  var tags = ID3.getAllTags("filename.mp3");
  if (tags.artist)
    artist.textContent = tags.artist;
  if (tags.title)
    track.textContent = tags.title;
}, {
  dataReader: FileAPIReader(file)
});

请注意匿名回调作为 loadTags的第二个参数。我如何使用Dart和 dart:js 库创建它?

Note the anonymous callback as the second parameter to loadTags. How do I create that with Dart and the dart:js library?

函数:

  js.context['loadTagsCallback'] = () {
    var tags = ID3.callMethod('getAllTags', ["filename.mp3"]);
    var artistTag = tags['artist'];
    var titleTag = tags['title'];

    if (artistTag != null) {
      artist.text = artistTag;
    }

    if (titleTag != null) {
      track.text = titleTag;
    }
  };

然后使用此Dart代码:

And then using this Dart code:

ID3.callMethod('loadTags', [
    "filename.mp3",
    js.context['loadTagsCallback'],
    new js.JsObject.jsify({'dataReader': id3FileReader})
]);

但是,我不想创建命名函数。任何想法或提示?

However, I don't want to create the named function. Any ideas or tips?

推荐答案

Dart闭包在跨边界发送时会自动转换为JS闭包。您只需这样做:

Dart closures are automatically converted to JS closures when sent across the border. You can just do this:

ID3.callMethod('loadTags', ["filename.mp3", () {
    var tags = ID3.callMethod('getAllTags', ["filename.mp3"]);
    var artistTag = tags['artist'];
    var titleTag = tags['title'];

    if (artistTag != null) {
      artist.text = artistTag;
    }

    if (titleTag != null) {
      track.text = titleTag;
    }
  },
  new js.JsObject.jsify({'dataReader': id3FileReader})
]);

这篇关于如何使用Dart的JS互操作创建匿名JavaScript函数/回调?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆