Я бы хотел, чтобы у моего гаджета было два разных представления: одно, когда оно только что добавлено, чтобы пользователь мог ввести некоторую информацию, и, когда он закончит с этим, другое, которое отображает некоторые данные на основе этой информации.
Самый ранний момент, когда я могу решить, какое из этих двух представлений я должен отобразить, — это когда я получаю состояние в первый раз, то есть в обратном вызове состояния. Однако, когда я меняю пользовательский интерфейс, он не всегда отображается - очевидно, есть некоторые проблемы с синхронизацией. Иногда пользовательский интерфейс вообще не отображается, иногда он отображается нормально, иногда он появляется перед анимацией загрузки гаджета.
Вот простой тестовый пример:
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="Trivial" height="120">
<Require feature="wave" />
</ModulePrefs>
<Content type="html">
<![CDATA[
<script type="text/javascript">
function createForm () {
document.write("<div id=\"form\">");
document.write("Username: <input type=text value=\"whatever\" id=\"user_name\">");
document.write("<input type=button value=\"Go!\" onClick=\"fetchFromUsername()\"><br>");
document.write("NSID: <input type=text value=\"287312604@N00\" id=\"user_id\">");
document.write("<input type=button value=\"Go!\" onClick=\"fetchFromNSID()\"><br>");
document.write("Number of photos: <input type=text value=\"3\" id=\"per_page\">");
document.write("</div>");
}
</script>
<script type="text/javascript">
function stateUpdated () {
createForm ();
}
function init() {
if (wave && wave.isInWaveContainer()) {
wave.setStateCallback (stateUpdated);
}
}
gadgets.util.registerOnLoadHandler(init);
</script>
]]>
</Content>
</Module>