Как мне создать анонимную функцию / обратный вызов 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 и библиотеки 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;
    }
  };

А затем используя этот код Dart:

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

Однако я не хочу создавать названную функцию. Есть идеи или советы?


person Seth Ladd    schedule 02.04.2014    source источник


Ответы (1)


Закрытие Dart автоматически преобразуется в закрытие 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})
]);
person Justin Fagnani    schedule 02.04.2014