如何使用dart中从javascript返回的代理

时间:2013-09-17 02:33:26

标签: dart dart-js-interop

我目前正在使用dart调用JavaScript函数,该函数接收JSON字符串和成功回调。

来自JavaScript的回调应该将响应作为JSON字符串返回。但是我无法从dart中返回的Proxy获取此信息。调试时,我可以在代理上看到_id,_ port和hashCode。

如何从代理商处获取所需信息?

代码段:

void init()
{
  _mJSProxy= js.retain(new js.Proxy(js.context.Test));}
}

void testRequest(String p_request)
{
  _mJSProxy.test(js.map(p_request), new js.Callback.once(onCallbackSuccess));
}

void onCallbackSuccess(var response, var httpRequest)
{
  // response & httpRequest is a Proxy
  // How to get the required information from them?
}

1 个答案:

答案 0 :(得分:2)

当返回的类型不是js.ProxyboolnumString时,将使用html.Element对象。返回js.Proxy时,您必须知道底层Js对象上的结构是什么才能使用它。例如,如果Js对象是XMLHttpRequest,您将能够像这样使用它:

js.Proxy p = // proxy on XMLHttpRequest
String result = p.responseText; 
// '.responseText' is handled by noSuchMethod and the call is done on Js side

在您的情况下,如果responseProxy并且您想在Dart中复制Json结构,则可以使用:

import 'dart:convert';

String jsonValue = js.context.JSON.stringify(reponse);
Map dartJson = JSON.decode(jsonValue);

旁注:您必须使用Map作为js.map(...)的参数。在您的代码中,您使用String