SharePointのDelegateControlは、レンダリングの順序
-
09-09-2019 - |
質問
私は自分のページのヘッダに委任コントロールにコントロールを追加2つのSharePointの機能、それぞれが同一の実装(下記参照)を、持っています。コントロールの一つは、コントロールがレンダリングされたときに、しかし、コントロールの順序が間違っています(1はjQueryライブラリであり、他方はjQueryの依存)他に依存します。どのように私はこれらのコントロールがでレンダリングされる順序を指定するのですか?
コントロール(両方は、それらが異なる.jsファイルを参照することを除いて、同一である):
<%@ Control ClassName="MyScriptControl" %>
<script type="text/javascript" src="/_layouts/MyScript.js"></script>
は、Feature.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のDependsOnjQueryの前に展開されている)ページの出力ます:
<script type="text/javascript" src="/_layouts/DependsOnjQuery.js"></script>
<script type="text/javascript" src="/_layouts/jQuery.min.js"></script>
私はMyControl1.jsがMyControl2.js前にレンダリングしたい。
解決
私は、これが私のマスターページのヘッダに二DelegateControlを追加し、そのデリゲートにjQueryのを追加することによって、仕事を得ることができました。この方法では、私はjQueryのはいつも私の依存ライブラリのロードを遅らせるために、いくつかのロジックを記述することなく、他のすべての前にロードすることを確認することができます。
<SharePoint:DelegateControl runat="server" ControlId="jQueryDelegate" AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" AllowMultipleControls="true"/>
他のヒント
これは、私には見えます。お使いのjQueryの50のシーケンスを制御し、あなたのDependsOnjQueryは100のシーケンスを制御し、あなたが良いことがあります付けます。
詳細はMSDN の上制御の委任のマニュアルを参照してください。
あなたがしようとすると、スクリプトのDEFER = "DEFER" 属性を設定しました。
そのスクリプトは、スクリプトをロードする前にロードしてレンダリングするためにページを待つ必要があることをユーザーエージェントを言うだろう。
他のスクリプトがロードされたときにtrueに設定されている1つのスクリプトで変数を設定することによって、それをハック可能性があります。他では、スクリプトがロードされた場合(ループとタイムアウト方法を考える)を試験して、両方のスクリプトがロードされたときに、あなたのロジックを呼び出すロジックを置いています。
とても素敵ではないが、あなたは実行を処理するためのロジックのいくつかの種類を必要とし、ちょうどあなたのスクリプトでインラインメソッドを実行しません。
ネイサンへ:代表者でシーケンスを決定するために使用されているのデリゲートコントロールのどのはロードします。これが問題になっている問題とは何の関係もないはずです。私はそれを理解したようJSファイルはちょうどちょうどデリゲート制御であることを起こるスクリプトに値を設定します。