Как мне создать анонимную функцию JavaScript / обратный вызов с помощью JS-взаимодействия Dart?
Я использую Dart и его JS-взаимодействие. Мне нужно преобразовать следующий код 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)
});
Обратите внимание на анонимный обратный вызов в качестве второго параметра loadTags
, Как я могу создать это с Дарт и dart:js
библиотека?
Самым близким, что я получил, было создание именованной функции с:
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;
}
};
А затем с помощью этого кода Дарт:
ID3.callMethod('loadTags', [
"filename.mp3",
js.context['loadTagsCallback'],
new js.JsObject.jsify({'dataReader': id3FileReader})
]);
Однако я не хочу создавать именованную функцию. Есть идеи или советы?
1 ответ
Решение
Закрытия дротиков автоматически преобразуются в замыкания JS при отправке через границу. Вы можете просто сделать это:
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})
]);