[英]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.