簡體   English   中英

從Dart創建js對象

[英]Create js Objects from Dart

我有需要翻譯為Dart的js代碼:

(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);

但是我不知道如何正確檢查somefile.js中是否存在OBJECT和OBJECT.somearray並在其中推送一個對象項。

使用dart:js,您可以使用以下命令檢查全局變量的存在:

bool exist = context.hasProperty('OBJECT');
if (exist) {
  final o = context['OBJECT'];
  if (!o.hasProperty('somearray')) {
    o['somearray'] = new JsArray();
  }
}

您正在混淆一些事情,尤其是JS功能的范圍。 我不想對您的js做出假設,但似乎您沒有正確初始化對象。 您想將類似的內容添加到您的javascript中

function myObject(){
  this.array = []
}

正如Felix在評論中指出的那樣,在dart中可以創建此功能。 有不同的選擇。 一種是通過dart:js訪問JS函數(請參閱felix注釋),另一種是使用js-interop庫。 我不確定是否有什么區別,但是我發現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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM