Еще раз, вопрос, связанный с Dart/Polymer.
Я хотел использовать библиотеку JavaScript Parse.com, но, поскольку она недоступна в Dart, я написал классы-оболочки, которые хранят JsObject и делегируют все вызовы из Dart соответствующему объекту JavaScript. В основном это как прокси.
Угадайте, что это работает очень здорово.
Однако мои наблюдаемые этого не делают. Чтобы понять это, вы должны взглянуть на следующую структуру одного из моих «прокси»-классов.
class ParseObject extends Observable {
JsObject _jsDelegate = new JsObject(context['Parse']['ParseObject']);
void set(String key, dynamic value) {
_jsDelegate.callMethod('set', [key, jsify(value)];
}
dynamic get(String key) {
return dartify(_jsDelegate.callMethod('get', [key]));
}
}
HTML-код моего Polymer Element выглядит так:
<div>Name: {{project.get('name')}}</div>
Поскольку привязка данных оценивается только в случае изменения параметра метода, он никогда не будет обновляться, и поэтому даже при изменении имени старое останется на месте.
Решение, которое я придумал, состоит в том, чтобы сохранить все значения, которые пользователь устанавливает в методе ParseObject#set(String, dynamic) в карту, которую можно наблюдать. Это работает, но я думаю, что это грязно, так как я должен убедиться, что обе карты, та, что в Dart, и та, что в представлении JavaScript ParseObject, равны.
Таким образом, я ищу лучшее решение и думаю о каком-то методе, чтобы сказать Polymer переоценить свои привязки данных.
Существует ли такой метод или есть какие-либо другие возможности для решения этой проблемы?