0

フライアウトに問題があります。コンポーネントをダブルクリックすると、ガジェットに対応するフライアウト ウィンドウが表示されます。ただし、それまたはフライアウトを含む他のビジュアル コンポーネントをダブルクリックすると、フライアウト ドキュメントは null として返されます。これがなぜなのかわかりません。フライアウトを消して再度開くか、新しいフライアウトにすれば問題ありません。これが発生するのは、フライアウトが既に開いている場合のみです。これがなぜなのかについてのアイデアを探しています。

ダブルクリック コード:

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
}
4

1 に答える 1

1

Windows 7 用のガジェットの作成についてはよくわかりませんが、タイミングの問題によく似ています。フライアウトが既に存在する場合はfile、新しいファイルをロードするようにプロパティを変更します。待機せずに呼び出しonFlyoutShowて、ドキュメントを取得しようとしますが、ドキュメントはまだ読み込まれていません

  • 私の最初の考えは次のとおりonShowです。ファイルを設定すると、イベントは発生しませんか? おそらくそうではないか、ifを持っていないでしょうが、確認する価値があります。
  • それでもうまくいかない場合はonFlyoutShow、タイムアウトを呼び出します。1000 などの長いタイマーから始めます。setTimeout(onFlyoutShow, 0);
于 2011-01-21T21:20:37.950 に答える