문제

내 페이지 헤더의 대리인 컨트롤에 컨트롤을 추가하는 두 가지 SharePoint 기능이 있는데 각각 동일하게 구현되었습니다(아래 참조).컨트롤 중 하나는 다른 컨트롤에 종속되지만(하나는 jQuery 라이브러리이고 다른 하나는 jQuery에 따라 다름) 컨트롤이 렌더링될 때 컨트롤의 순서가 올바르지 않습니다.이러한 컨트롤이 렌더링되는 순서를 어떻게 지정합니까?

컨트롤(다른 .js 파일을 참조한다는 점을 제외하면 둘 다 동일함):

<%@ Control ClassName="MyScriptControl" %>
<script type="text/javascript" src="/_layouts/MyScript.js"></script>

기능.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<Feature Id="AA9D59AC-D53E-4338-9B52-CD39F2A8C31A" 
    ActivateOnDefault="true" 
    Title="My Feature" 
    Description="Does something." 
    Scope="Site" Version="1.0.0.0" 
    Hidden="FALSE" 
    DefaultResourceFile="core" 
    xmlns="http://schemas.microsoft.com/sharepoint/">
    <ElementManifests>
        <ElementManifest Location="MyFeature\Elements.xml" /> 
    </ElementManifests>
</Feature>

Elements.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<Elements xmlns="http://schemas.microsoft.com/sharepoint/" 
    Id="24A4BB9A-9636-4a73-B3A5-35661DE19902">
    <Control Id="AdditionalPageHead" 
        ControlSrc="~/_controltemplates/MyControl.ascx" /> 
</Elements>

페이지의 출력(jQuery는 DefinesOnjQuery보다 먼저 배포됨):

<script type="text/javascript" src="/_layouts/DependsOnjQuery.js"></script>
<script type="text/javascript" src="/_layouts/jQuery.min.js"></script>

MyControl1.js를 MyControl2.js보다 먼저 렌더링하고 싶습니다.

도움이 되었습니까?

해결책

MasterPage의 헤더에 두 번째 델리게 컨트롤을 추가하고 해당 대의원에 jQuery를 추가 하여이 작업을 수행 할 수있었습니다. 이런 식으로, 나는 jQuery가 종속 라이브러리의로드를 지연시키기 위해 약간의 논리를 작성하지 않고도 항상 다른 모든 것보다 먼저로드 될 수 있습니다.

<SharePoint:DelegateControl runat="server" ControlId="jQueryDelegate" AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" AllowMultipleControls="true"/>

다른 팁

제가 보기에는 Sequence 속성을 사용하여 이러한 항목이 렌더링되는 순서를 제어할 수 있는 것 같습니다.jQuery 컨트롤에 50의 시퀀스를 지정하고 DefinesOnjQuery 컨트롤에 100의 시퀀스를 지정하면 좋을 것입니다.

참조 MSDN의 위임 제어 설명서 더 많은 정보를 위해서.

스크립트에서 DEFER = "DEFER"속성을 설정하려고 했습니까?

즉, 스크립트가 스크립트를로드하기 전에 페이지가로드되고 렌더링 될 때까지 스크립트가 대기해야한다고 사용자 에이전트에게 알립니다.

그렇지 않으면 하나의 스크립트에서 변수를 설정하여 해킹 할 수 있습니다. 스크립트가로드 될 때 true로 설정됩니다. 다른 한편으로는 스크립트가로드 된 경우 테스트 한 논리를 배치 한 다음 두 스크립트를로드 할 때 로직을 호출합니다.

그다지 좋지는 않지만 실행을 처리하려면 일종의 논리가 필요하며 스크립트에서 메소드를 인라인으로 실행하는 것이 아닙니다.

Nathan에게 : 대의원의 시퀀스는 결정에 사용됩니다. 대의원 제어 중 어느 것입니다 로드하려면. 이것은 문제의 문제와 관련이 없어야합니다. 내가 이해하면서 JS 파일은 대의원 제어가되는 스크립트에서 값을 설정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top