6

ロードされたリソースとしてyepnope.jsを使用します。JSモジュールのすべての依存関係が読み込まれた場合にのみ、そのモジュールでコードを実行したいと思います。すでにロードされているJS依存関係をロードしたくありません。

依存関係D1.jsとD2.jsがあるとします。私は試した

yepnope({
    load: ['D1.js', 'D2.js],
    complete: function() {
        //execute my code here
    }
});

これは機能しますが、リソースは、以前にすでにロードされている場合でも、毎回ロードされます。

私がそのような複数のテストを行う場合:

yepnope([{
    test: $().d1,
    nope: 'D1.js'
},
{
    test: $().d2,
    nope: 'D2.js'
}]);

完成した関数全体(すべてのリソースがロードされた後に実行される関数)をどこに配置するかは明確ではありません。

yepnopeでこれを行うことは可能ですか、それとも別のコンポーネントを使用する必要がありますか?

ありがとう。

4

2 に答える 2

4

jquery.js、jquery.jgrowl.js、および jquery.powertip.js を条件付きで読み込む必要があるとします。次のコードが機能すると予想されます。

yepnope([{
  test: typeof(window.jQuery) === 'undefined' || 
        jQuery.fn.jquery.match(/^1\.[0-9]+/) < 1.7,
  yep: '//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.0/jquery.min.js'
},
{
  test: typeof(window.jQuery) === 'undefined' 
        || typeof(window.jQuery.fn.jGrowl) === 'undefined',
  yep: ['//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.min.js',
        '//cdnjs.cloudflare.com/ajax/libs/jquery-jgrowl/1.2.12/jquery.jgrowl.css'],
  complete: function() {
    console.log('completed loading jGrowl (should fire first, or not at all)');
  }
},
{
  test: typeof(window.jQuery) === 'undefined' 
        || typeof(window.jQuery.fn.powerTip) === 'undefined',
  yep: ['//cdnjs.cloudflare.com/ajax/libs/jquery-powertip/1.1.0/jquery.powertip.js', 
        '//cdnjs.cloudflare.com/ajax/libs/jquery-powertip/1.1.0/jquery.powertip.min.css'],
  complete: function() {
    console.log('completed loading powertip'); 
    jQuery.jGrowl("Growling!");
  }
}
]);

ただし、jquery.powertip.js が既に読み込まれているが、jquery.jgrow.js が読み込まれていないページでこれを実行すると、すべてのファイルの読み込みが完了しました。

次のフィドルは、yepnope 1.5.4 でのこのバグを示しています: http://jsfiddle.net/dergachev/HHxK2/

また、yepnope の現在のトランク (マスター ブランチ) では、このバグは解消されていることにも注意してください。おそらく、次のチケットに関連しています (1.5.4 にバックポートされたことはありません)。

于 2013-05-10T16:43:57.997 に答える
3

コールバックは、対応するスクリプトが実行された後に実行されます (読み込まれただけではありません)。すべてのスクリプトは順番に実行されるため、最後のオブジェクトにcallbackまたはcompleteプロパティを配置すると、最後に実行されます。

于 2012-09-08T21:20:50.847 に答える