У меня есть приложение Dart, в котором мне нужно установить несколько полей на основе того, что возвращается из запроса JSON. Я расширяю PolymerElement и использую @observable, чтобы синхронизировать поле. То, что я хочу сделать, - это установить глобальную переменную и включить эту переменную класса. Я уверен, что мне не хватает чего-то фундаментального, но я не могу получить доступ к объекту, который используется HTML, потому что он не был создан (или имеет его?).Dart: Наблюдаемая переменная не обновляется
mobilemenu.dart
library mobilemenu;
import 'dart:html';
import 'order_item.dart' as orderitem;
main() {}
mobilemenu.html
<!DOCTYPE html>
<html>
<head>
<link rel="import" href="order_item.html">
<script src="packages/polymer/boot.js"></script>
</head>
<body>
<div class="mobile-menu-product-name">
<order-item></order-item>
</div>
</body>
</html>
order_item.dart
library orderitem;
import 'package:polymer/polymer.dart';
import 'dart:html';
import 'dart:json' as JSON;
@observable String g_product_name;
@CustomTag('order-item')
class OrderItem extends PolymerElement with ObservableMixin {
@observable String product_name = g_product_name;
}
Map processString(String jsonString) {
// Create a map from json string
Map jsonParse = JSON.parse(jsonString);
print(jsonParse);
return jsonParse;
}
setGlobals(Map jsonMap) {
g_product_name = jsonMap["details"][0]["product_name"];
print(g_product_name);
}
main() {
var baseUrl = "https://example.com/add_item.json";
var params = window.location.search;
var fullUrl = baseUrl + params;
HttpRequest.getString(fullUrl)
.then(processString)
.then(setGlobals);
}
order_item.html
<polymer-element name="order-item">
<template>
<div>
<span>{{product_name}}</span>
</div>
</template>
<script type="application/dart" src="order_item.dart"></script>
</polymer-element>
Да, это конечно работает!Так ли моя проблема в том, что я использую фьючерсы? Похоже, что они занимают слишком много времени, и HTML пытается обновить, прежде чем они будут выполнены. Но я думал, что весь момент с фьючерсами заключается в том, что все в порядке, если процесс требует времени, чтобы закончить. Как еще я смогу обеспечить, чтобы мой JSON был извлечен? – jmoneystl
Обновлен мой ответ рабочим примером, использующим фьючерсы HttpRequest. – Nathanial