简体   繁体   English

如何使用Dart的JS互操作创建匿名JavaScript函数/回调?

[英]How do I create an anonymous JavaScript function/callback with Dart's JS interop?

I am using Dart and its JS interop . 我正在使用Dart和它的JS互操作 I need to convert the following JavaScript code to Dart: 我需要将以下JavaScript代码转换为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)
});

Note the anonymous callback as the second parameter to loadTags . 请注意匿名回调作为loadTags的第二个参数。 How do I create that with Dart and the dart:js library? 如何使用Dart和dart:js库创建它?

The closest I got was creating a named function with: 我得到的最接近的是创建一个命名函数:

  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;
    }
  };

And then using this Dart code: 然后使用这个Dart代码:

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 closures are automatically converted to JS closures when sent across the border. 通过边界发送时,Dart闭包会自动转换为JS闭包。 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})
]);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何通过 JS - Dart 互操作从 JavaScript 访问 `this`? - How do I access `this` from JavaScript via JS - Dart interop? 从javascript调用dart编译的Javascript时如何将回调函数传入dart编译的Javascript? - When calling dart compiled Javascript from javascript how do I pass in a callback function into dart compiled Javascript? Dart JS Interop - 如何传递函数的回调对象 - Dart JS Interop - How to pass a callback object of functions 使用Dart中的Blockly的addChangeListener()函数(js互操作) - using Blockly's addChangeListener() function from Dart (js interop) 如何在稳定的1.1.1 Dart中绑定JavaScript回调并在JavaScript(Dart2Js2Dart)中绑定Dart回调? - How to bind JavaScript callback in stable 1.1.1 Dart and bind Dart callback in JavaScript (Dart2Js2Dart)? 使用js-interop如何将javascript数组和对象转换为本机dart Map。 - Using js-interop how can I convert javascript Array and Object to native dart Map. js-interop:如何使用js-interop将javascript`new`实现到dart? - js-interop: how to implement javascript `new` to dart with js-interop? 如何在 dart flutter 中创建回调函数? - How to create callback function in dart flutter? dart js-interop FunctionProxy与js.context的回调关系 - dart js-interop FunctionProxy callback relationship to js.context js-interop:如何在回调函数中访问输入数据? - js-interop: How to access the input data in the callback function?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM