Вопрос о выпуске гаджета Windows 7 - PullRequest
0 голосов
/ 21 января 2011

У меня проблемы с выпуском. Что происходит с моим гаджетом, так это то, что вы дважды щелкаете компонент, и у него будет соответствующее всплывающее окно. Если вы дважды щелкнете по этому или любому другому визуальному компоненту с выпадающим меню, всплывающий документ будет возвращен как ноль. Я понятия не имею, почему это так, и если вы заставите всплывающее окно уйти и снова откроете его или новый, это нормально. Это происходит только тогда, когда всплывающее окно уже открыто. Я ищу некоторые идеи о том, почему это так.

Код двойного щелчка:

Blah.prototype.ondblclick = function()
{

    var me = this.parent;

    if (System.Gadget.Flyout.show)
    {
        // flyout is already shown, make sure it shows our stuff
        System.Gadget.Flyout.file = FLYOUT_FILE;
        onFlyoutShow();
    }
    else
    {
        System.Gadget.Flyout.file = FLYOUT_FILE;
        System.Gadget.Flyout.onShow = onFlyoutShow;
        System.Gadget.Flyout.show = true;
    }
    System.Gadget.Flyout.onHide = onFlyoutHide;

    function onFlyoutShow()
    {
        me.flyoutOpen = true;
        me.updateFlyout();
    }

    function onFlyoutHide()
    {
        me.flyoutOpen = false;
    }
};

Выполненный код:

Blah.prototype.updateFlyout = function ()
{
    var flyoutDoc = System.Gadget.Flyout.document;
    //flyoutDoc is null at this point
    var info = flyoutDoc.getElementById("info");
    info.innerHTML = "info: " + this.information;
    //Error thrown: 'null' is null or not an object
}

1 Ответ

1 голос
/ 22 января 2011

Я не знаю много о написании гаджетов для Windows 7, но для меня это выглядит как проблема с синхронизацией.Когда всплывающая подсказка уже есть, вы изменяете свойство file, которое указывает ему загружать новый файл.Не дожидаясь, вы звоните onFlyoutShow, который пытается получить документ, и документ еще не загружен .

  • Моя первая мысль: не происходит ли событие onShow, когда вы устанавливаете файл?Возможно, нет или у вас не будет if, но стоит проверить.
  • Если это не сработает, вызов onFlyoutShow по таймауту.Начните с длинного таймера, например, 1000. А затем сократите его, надеюсь, вы сможете получить значение 0: setTimeout(onFlyoutShow, 0);
...