我正在将JavaScript转换为Dart,JavaScript中我创建动态变量的方式如下:
window["text" + pageNumber] = 123;
alert(window["text" + pageNumber]);
我该如何使用Dart实现这个功能?
我正在将JavaScript转换为Dart,JavaScript中我创建动态变量的方式如下:
window["text" + pageNumber] = 123;
alert(window["text" + pageNumber]);
Window
(window
的类型)是一个类。您无法动态添加属性到Dart类中。使用Map
可以实现window["text" + pageNumber] = 123;
。JS中的对象表示与映射非常相似,因此它可以正常工作。[]
运算符,您也可以在该类的实例上调用它,但它仍然不会添加属性。它实际上做什么取决于[]
运算符的实现方式。Map
变量。final Map<String,int> myGlobals = <String,int>{};
myGlobals['someName'] = 123;
设置值,并使用print(myGlobals['someName']);
读取它们。如果您需要设置一个全局值,也可用于您可能使用的JS库,则可以使用dart-js-interop。import 'dart:js';
import 'dart:html';
main() {
int pagenumber = 5;
context['Window']['text$pagenumber'] = 123;
window.alert('${context['Window']['text$pagenumber']}');
}
在 DartPad 上试一试。
提示:
"text" + pageNumber
当 pageNumber
不是字符串时无法工作。
在 Dart 中,您不能将字符串和数字相加。
"text" + pageNumber.toString()
可以工作,但 'text$pagenumber'
是更具 Dart 风格的方式。在字符串插值中,toString()
会自动调用。
window
是一种严重的误用。这正是使用Dart的一个免费技巧之一。只需创建一个全局的Map
变量,并给它一个反映其目的的名称,然后将您的值存储在其中。我已经更新了我的答案。我不知道你所说的table_row_ele
变量是什么意思。 - Günter Zöchbauer