Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension chrome扩展中的Dart/JS互操作问题_Google Chrome Extension_Dart_Dart Js Interop - Fatal编程技术网

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