3

2つのSharePoint機能があり、それぞれが同じように実装されており(以下を参照)、ページのヘッダーにあるデリゲートコントロールにコントロールを追加します。コントロールの1つは他に依存しています(1つはjQueryライブラリで、もう1つは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の前にレンダリングしたい。

4

3 に答える 3

2

マスターページのヘッダーに2番目のDelegateControlを追加し、そのデリゲートにjQueryを追加することで、これを機能させることができました。このようにして、依存ライブラリのロードを遅らせるロジックを記述しなくても、jQueryが常に他のすべての前にロードされるようにすることができます。

<SharePoint:DelegateControl runat="server" ControlId="jQueryDelegate" AllowMultipleControls="true"/>
<SharePoint:DelegateControl runat="server" ControlId="AdditionalPageHead" AllowMultipleControls="true"/>
于 2009-02-27T21:55:52.800 に答える
1

Sequence属性を使用して、これらの人がレンダリングされる順序を制御できるように見えます。jQueryコントロールに50のシーケンスを与え、DependsOnjQueryコントロールに100のシーケンスを与えれば、うまくいくはずです。

詳細については、MSDNのDelegateControlのドキュメントを参照してください。

于 2009-02-27T21:20:30.170 に答える
0

スクリプトで DEFER="DEFER" 属性を設定しようとしましたか。

これは、スクリプトをロードする前に、スクリプトがページのロードとレンダリングを待つ必要があることをユーザー エージェントに伝えます。

それ以外の場合は、スクリプトがロードされたときに true に設定されている 1 つのスクリプトで変数を設定することでハッキングできます。もう一方には、スクリプトが読み込まれたかどうかをテストするロジック (ループとタイムアウト メソッドを考えてください) を配置し、両方のスクリプトが読み込まれたときにロジックを呼び出します。

あまりいいことではありませんが、スクリプトでメソッドをインラインで実行するだけでなく、実行を処理するための何らかのロジックが必要です。

nathan へ: デリゲートのシーケンスは、どのデリゲート コントロールを読み込むかを決定するために使用されます。これは、問題となっている問題とは何の関係もないはずです。私が理解しているように、JSファイルは、たまたまデリゲートコントロールであるスクリプトに値を設定するだけです。

于 2009-02-27T21:29:27.123 に答える