2011-01-21 2 views
0

플라이어에 문제가 있습니다. 제 가젯은 구성 요소를 두 번 클릭하면 해당 플라이 아웃 창이 나타납니다. 그러나 플라이 아웃이 포함 된 시각적 구성 요소를 두 번 클릭하면 플라이 아웃 문서가 null로 반환됩니다. 왜 그런지 모르겠지만 플라이 아웃을 떠나서 다시 열거 나 새로 열면 괜찮습니다. 플라이 아웃이 이미 열려있는 경우에만 발생합니다. 나는 이것이 왜 있는지에 대한 몇 가지 아이디어를 찾고 있습니다.Windows 7 가젯 플라이 아웃 질문

더블 클릭 코드 :

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

나는 윈도우 7 가젯 작성에 대한 많은 모르겠지만, 나에게 그것은 타이밍 문제처럼 많이 보인다 . 플라이 아웃이 이미 있으면 새 파일을로드하라는 내용의 file 속성을 변경합니다. 당신을 기다리지 않고 onFlyoutShow을 호출하면 문서를 가져오고 은 문서가 아직로드되지 않았습니다.

  • 내 생각은 다음과 같습니다. 파일을 설정할 때 onShow 이벤트가 실행되지 않습니까? 아마도 그렇지 않거나 if가 없지만 확인할 가치가 있습니다.
  • 그래도 작동하지 않으면 시간 초과로 onFlyoutShow을 호출하십시오. 1000 타이머와 같은 긴 타이머로 시작하십시오. 단축키를 사용하면 0까지 내려갈 수 있습니다. setTimeout(onFlyoutShow, 0);
+0

글쎄요, 타이밍 문제로 문제가 해결되었습니다. setTimeout이 문제를 해결했습니다. 이제 내가 "옳은"방식으로 할 수 있는지의 문제입니다. 지금은 +1. – user535617

+0

나는 올바른 방법이 있다고 확신하지 못합니다. System.Gadget.Flyout (http://msdn.microsoft.com/en-us/library/ms723669(v=vs.85).aspx)에 대한 설명서는 더 이상 이벤트를 나열하지 않습니다. 시간 제한을 0으로 설정할 수 있으면 얻을 수있는 것과 거의 비슷합니다. – Hemlock

+1

@user, @Hemlock : 가장 좋은 방법은 콜백 시스템을 사용하는 것입니다. 가젯의 코드는 함수를 정의하고 플라이 아웃의 JavaScript 코드가 실행될 때 가젯 윈도우의 함수를 호출하여 비즈니스를 올바르게 수행 할 수 있도록합니다. 요소가 실행되기 전에 타이머가 지연되거나 시간이 실행되기 전에로드에서 플라이 아웃이 지연 될 수 있으므로 타이머가 안정적이지 않을 수 있습니다. –