2

プログレッシブ エンハンスメントの Enhanced.jsライブラリを使用した Filament Group のデモをご覧ください。

与えるように変更する:-

<script type="text/javascript" src="../_shared/EnhanceJS/enhance.js"></script>
<script type="text/javascript"> 
// Run capabilities test
enhance({
loadScripts: [
 {src: 'js/excanvas.js', iecondition: 'all'},
 '../_shared/jquery.min.js',
 'js/visualize.jQuery.js',
 'js/example.js'
],
loadStyles: [
'css/visualize.css',
'css/visualize-dark.css'
] 
}); 

    alert($);

</script> 

おそらくjQueryがまだロードされていないため、アラートで「$ is undefined error」が表示されます。

注 - alert($) はデバッグ用です - $('some-selector') などで何かをしようとしています - $(handler) や $(document).ready などは動作しません - jquery が読み込まれておらず、$ が定義されていません。

エンハンスのonScriptLoadedは彼のトリックを行う必要があるように見えますが、追加すると

onScriptsLoaded:[runMyCode()]

以降

function runMyCode()
{
    alert("runMyCode was called");
    alert($);
}

最初のアラートは機能しますが、$ はまだ定義されていません。

ボタンのクリック イベントで runMyCode を呼び出すと、機能します。

問題は、enhance.js ですべてのスクリプトの読み込みが完了したら、どうすればコードを実行できるかということです。

PS IE8/FF3/Chrome7で確認済みの同じ問題

4

2 に答える 2

3

これは問題かもしれないと思います:

onScriptsLoaded:[runMyCode()]

試しましたか (配列表記が正しいと仮定して): (編集— 正しくありません)

onScriptsLoaded: [runMyCode]

? 最初の方法では、ライブラリをセットアップするときに関数を呼び出します。代わりに、関数への参照だけを渡したいとします。

実際に編集するのは次のとおりです。

onScriptsLoaded: runMyCode

配列がどこから来たのかわかりません。「enhance.js」のドキュメントには絶対に記載されていません。

于 2010-11-09T14:05:54.240 に答える
3

これはあなたが求めているものだと思います。これはonScriptsLoadedcallback として直接使用されることに注意してください。したがって、配列ではなく関数にする必要があります。

enhance({
   loadScripts: [
    {src: 'js/excanvas.js', iecondition: 'all'},
    '../_shared/jquery.min.js',
    'js/visualize.jQuery.js',
    'js/example.js'
   ],
   loadStyles: [
    'css/visualize.css',
    'css/visualize-dark.css'
   ],
   onScriptsLoaded: function() { alert($); }
});

または、より一般的に関数の場合、次のように参照のみを渡します。

   onScriptsLoaded: runMyCode

onScriptsLoaded:[runMyCode()]「種類」が機能する理由は、すぐに関数を呼び出して(スクリプトの終了時ではなくrunMyCode、この行の実行時)、その結果から配列を作成するためです。は配列ではなくコールバック関数であると想定されるため、スクリプトが終了すると実際にはエラーがスローされます。onScriptsLoaded

于 2010-11-09T14:06:22.240 に答える