从Dart创建js对象
Create js Objects from Dart
我有js代码需要翻译成Dart:
(function() {
var s, e;
s = document.createElement("script");
s.src = “//someurl.com/somefile.js";
s.async = true;
e = document.getElementsByTagName("head")[0];
e.insertBefore(s, e.firstChild);
this.OBJECT = this.OBJECT || {};
this.OBJECT.array = this.OBJECT.somearray || [];
})();
OBJECT.somearray.push({
val1 : “foo",
val2 : “bar"
});
将脚本嵌入头部的基本部分我喜欢这样做:
ScriptElement scr = new ScriptElement()
..src = "//someurl.com/somefile.js";
..async = true;
querySelector('head').append(scr);
但是我不知道如何正确地检查OBJECT和OBJECT.somearray是否存在于somefile.js中,并在其中推送一个对象项
使用dart:js,您可以使用检查全局变量的存在
bool exist = context.hasProperty('OBJECT');
if (exist) {
final o = context['OBJECT'];
if (!o.hasProperty('somearray')) {
o['somearray'] = new JsArray();
}
}
您混淆了一些东西,尤其是JS的函数范围。我不想对你的js做假设,但看起来你没有正确初始化你的OBJECT。你想在你的javascript 中添加这样的东西
function myObject(){
this.array = []
}
正如Felix在评论中指出的那样,在dart中你可以创建这个函数。有不同的选择。一种是通过dart:JS访问JS函数(请参阅felix注释),另一种是使用jsinterop库。我不特别确定区别是什么,但我发现js-interop库有一个更干净的API(https://github.com/dart-lang/js-interop)
import 'package:js/js.dart' as js;
var yourObject = js.Proxy(js.context.myObject);
yourObject.array.push("...");
js.interop使javascript调用在对象上可用,而不是使用callMethod等。但我猜它依赖于dart2js,而不是仅依赖于dart。
相关文章:
- 使用JS将数组转换为json对象
- 查看JS对象的所有键,甚至是getter定义的键
- 在URL中传递JS对象
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- Node.js中的JavaScript原型对象效率
- 如何使用自定义功能覆盖时间轴对象.js时间轴对象的_repaintMinorText
- 如何在第三轴上旋转 3D 对象.js
- 三个中是否有容器类型对象.js来转换一组子对象
- 从 JSON 对象 - JS 周围删除双引号
- 删除对象JS中的节点
- 在对象数组中搜索非空对象JS
- 按未定义的值从数组中选择对象?JS
- 递归循环,直到我们'重新处理对象[JS]
- 向窗口对象-js添加新属性时得到通知
- 如何包含对象/关联数组到对象(js)
- 加载依赖于页面的面向对象JS属性的最好方法是什么?
- 合并新的数组对象到现有的对象js
- 获取带有下划线的数组中的对象.js
- 在带有下划线的嵌套集合中查找对象.js