Первая версия определяет переменную js с именем recentlyUsedStations
с ее значением, заданным с помощью объекта js DartObject
, содержащего ссылку на объект Dart ["Goetheplatz", "Marienplatz"]
. Со стороны Js эта переменная почти непригодна и должна использоваться только для сохранения ссылки на объект Dart. Таким образом, объект Дарт можно получить, вызвав context["recentlyUsedStations"]
.
Безnew js.JsObject.jsify(...)
:
final a = ['b', 'c'];
js.context['a'] = a;
// unusable wrapper on Js side
// display : [object DartObject]
js.context['console'].callMethod('log', [js.context['a']]);
// the reference is kept
// display : true
print(identical(a, js.context['a']));
Вторая версия определяет переменную JS с именем recentlyUsedStations
с его значением, установленным с объектом JS, которая была создана путем преобразования ["Goetheplatz", "Marienplatz"]
в эквивалентный Js массив ["Goetheplatz", "Marienplatz"]
. Таким образом, данные могут использоваться на стороне Js, но он забывает ссылку на исходный объект Dart. Поэтому добавление элемента в список дротиков не влияет на массив на стороне Js.
Сnew js.JsObject.jsify(...)
:
final a = ['b', 'c'];
js.context['a'] = new js.JsObject.jsify(a);
// converted to an array on Js side
// display : [b,c]
js.context['console'].callMethod('log', [js.context['a']]);
// the reference has been forgotten
// display : false
print(identical(a, js.context['a']));
// adding an element on the original List has no effect on Js value
a.add('d');
js.context['console'].callMethod('log', [js.context['a']]); // b,c
Alexandre, вы уверены, что добавление элемента к списку на стороне вытачки не отражается на стороне Js? В консоли инструментов разработчика я могу наблюдать за изменениями в объекте js. –
Если вы используете 'jsify', я уверен, что добавление элемента в объект Dart не влияет на объект Js. –
Используя ваш пример, последняя строка выводит вывод * null * –