Google chrome extension chrome扩展中的Dart/JS互操作问题
以下两者之间的区别是什么:Google chrome extension chrome扩展中的Dart/JS互操作问题,google-chrome-extension,dart,dart-js-interop,Google Chrome Extension,Dart,Dart Js Interop,以下两者之间的区别是什么: context[“recentlyUsedStations”]=“Goetheplatz”、“Marienplatz”]; 及 context[“recentlyUsedStations”]=newjsobject.jsify([“Goetheplatz”、“Marienplatz”); 我在chrome扩展背景页面上使用它,并且在这两种情况下都能在弹出页面中获得值。如果我尝试更改列表,那么第一种情况会生成一个整数数组(值0)。第二种情况正常。第一个版本定义了一个
context[“recentlyUsedStations”]=“Goetheplatz”、“Marienplatz”];
及
context[“recentlyUsedStations”]=newjsobject.jsify([“Goetheplatz”、“Marienplatz”);
我在chrome扩展背景页面上使用它,并且在这两种情况下都能在弹出页面中获得值。如果我尝试更改列表,那么第一种情况会生成一个整数数组(值0)。第二种情况正常。第一个版本定义了一个名为
recentlyUsedStations
的js变量,其值与js对象DartObject
一起设置,其中包含对[“Goetheplatz”,“Marienplatz”]
Dart对象的引用。从Js方面来看,这个变量几乎不可用,应该只用于保持对Dart对象的引用。这样,可以通过调用上下文[“recentlyUsedStations”]
来检索Dart对象
没有新的js.JsObject.jsify(…):
final a=['b','c'];
js.context['a']=a;
//Js端无法使用的包装器
//显示:[对象对象]
js.context['console'].callMethod('log',[js.context['a']]);
//参考资料保留
//显示:真
打印(相同(a,js.context['a']);
第二个版本定义了一个名为recentlyUsedStations
的js变量,其值由一个js对象设置,该js对象是通过将[“Goetheplatz”,“Marienplatz”]
转换为等效的js数组[“Goetheplatz”,“Marienplatz”]
创建的。这样,数据可以在Js端使用,但它会忘记原始Dart对象上的引用。因此,在dart列表中添加元素对Js端的数组没有影响
使用新的js.JsObject.jsify(…):
final a=['b','c'];
js.context['a']=new js.JsObject.jsify(a);
//转换为Js端的数组
//显示:[b,c]
js.context['console'].callMethod('log',[js.context['a']]);
//参考文献已被遗忘
//显示:假
打印(相同(a,js.context['a']);
//在原始列表中添加元素对Js值没有影响
a、 添加('d');
js.context['console'].callMethod('log',[js.context['a']]);//b、 c
Alexandre,你确定在dart端的列表中添加元素不会反映在js端吗?在开发者工具控制台中,我可以观察js对象上的更改。如果使用jsify
,我很确定向dart对象添加元素对js对象没有影响。使用您的示例,最后一行生成输出null