2014-02-21 2 views
1

"$ is not defined"오류가 발생하는 스크립트가 현재로드되는 순서와 관련된 문제가 있습니다. 나는 (SO에 대한 몇 가지 다른 사람에 대한 문제이었다) = "true"로 LoadScriptsBeforeUI을 설정해야했습니다예기치 않은 순서로 ASP.Net WebForms 스크립트가로드 됨

  <asp:ScriptReference Assembly="*.Scripts" Name="*.Scripts.jquery-1.8.1.min.js" /> 
      <asp:ScriptReference Path="~/Scripts/jquery-ui-1.9.2.min.js" /> 
      <asp:ScriptReference Path="~/Scripts/development.js" /> 
      <asp:ScriptReference Assembly="*.Scripts" Name="*.Scripts.STBaseFunctions.js" /> 
      <asp:ScriptReference Path="~/Scripts/jquery.extensions.js" /> 
      <asp:ScriptReference Path="~/Scripts/Common.startup.js" /> 
      <asp:ScriptReference Path="~/Scripts/STBase.startup.js" /> 

:

나는 RadScriptManager 스크립트 속성 내부의 masterpage에 다음 스크립트를로드하고있어 스크립트 관리자에.

"Source code"

"Firebug Network Tab"

이 문제는 "$"의 스크립트에 포함 된 "jquery.extensions.js"에 의해 제공되어야한다 (확장 메서드 호출시 사용할 수없는 원인 스크립트 관리자)를 포함 registerclientscript 내가 그것을 이해하는 방식이 전달 된 요소가 렌더링에 beeing되기 직전에 코드를 삽입하기 때문에 스크립트가 제공하는 동안 나에게, 이해가되지 않습니다,

scriptControl.registerAndExecute('{0}','{1}'); 

scriptmanager에 의해 n이로드되어야합니다.

내가 이런 일이 발생하기 위해 잘못하고있는 것을 볼 수 없습니다. 필자의 이해를 돕기 위해 RegisterStartupScript는 페이지로드가 완료되면 발생합니다 (사이트의 소스 코드에서 확인한 내용과 일치합니다). 그러나 스크립트가 함수 실행 전에로드되었지만 작동하지 않습니다.

누구든지 해결 방법을 알고 있습니까?

답변

1

테스트 사이트가 아닌 실제 사이트로 변경하는 동안 오류가 발생했습니다.

실제 사이트에서 dockPanel 스크립트는 jQuery가로드되기 전에로드 된 beeing시 $ (window) .resize에 등록됩니다.

내 테스트 환경에서 jquery 파트가 이미로드 된 후 내 dockPanel 스크립트가로드되어 창 크기 조정 작업을 즉시 구독하게 만들었습니다.

var delayTimer = null; 
function getDelayTimer() { 
    return delayTimer || (delayTimer = $.utility.delayTimer(dockPanelConstants.resizeTimerDelay)); 
} 

(function() { <!--- fix 

    $(window).resize(function() { 
     getDelayTimer(function() { 

      for (var i = dockpanelResizeHandles.length - 1; i >= 0; i--) { 
       var dp = dockpanelResizeHandles[i]; 
       dp.repaint(); 
      } 
     }); 
    }); 
}); <!--- fix