Czy można przekonwertować obiekt javascript lub tablicę na macierzystą mapę i/lub listę? Próbuję uzyskać plik manifestu zwracany z javascript jako Object i chcę go przekonwertować na obiekt mapy Dart.Korzystanie z js-interop, w jaki sposób mogę przekonwertować tablicę javascript i obiekt na natywną mapę dart.
5
A
Odpowiedz
2
Wiele zmian w API zostało wykonane przez tego roku, następujący kod jest odpowiedź Alexandre Ardhuin jest dostosowany do najnowszej (# 30104) Dart Sdk
import "dart:convert";
import "dart:js" as js;
convert(js.JsObject object)
{
return JSON.decode(js.context['JSON'].callMethod("stringify", [ object ]));
}
3
Możesz użyć wbudowanej metody JavaScript JSON.stringify() z kontekstu JavaScript.
Future getManifest() {
var completer = new Completer();
js.scoped(() {
var chrome = js.context.chrome;
var manifest_proxy = chrome.runtime.getManifest();
var manifest_string = js.context.JSON.stringify(manifest_proxy);
var manifest = JSON.parse(manifest_string);
logger.fine("manifest_string = $manifest_string");
completer.complete(manifest);
});
return completer.future;
}
Który wydrukuje następujące elementy na konsoli i wyśle do końca mapę dart.
manifest_string = {"app":{"background":{"scripts":["main.js"]}},"manifest_version":2,"minimum_chrome_version":"23","name":"chrome.dart - test","version":"1"}
4
można przekonwertować javascript JSON do Dart JSON z:
import 'dart:json';
import 'package:js/js.dart' as js;
convert(js.Proxy jsonProxy) => JSON.parse(js.context.JSON.stringify(jsonProxy));
Nie musisz używać "Przyszłości". –
Fajnie, więc bycie w zasięgu nie wymaga zwrotu w przyszłości. W tej bibliotece zacząłem używać Future jako wzorca dla większości połączeń dostarczanych przez chrome. * Apis. Jeśli tak jest, to powinienem potrzebować tylko kontraktów Futures na metody, które wymagają wywołań zwrotnych. http://goo.gl/x2H2K –