一部のスライドには、そのスライドとともにサーバー側からレンダリングされる beforeSlideshowAction が含まれるスライドショー Web アプリケーションがあります。JavaScript は、このコンテンツを生成するスライド テンプレートの一部であるため、そのスライドのコンテンツとともにレンダリングされます。
ただし、以下のJavaScript関数は私のコンテンツと一緒に更新されません。たとえば、スライドショーをロードしてから、これら 2 つのスライドの場所を切り替えると (スライドショーが完全なサイクルを実行した後に ajax によって更新が行われます)、以下の beforeSlideshowAction_slide1() は beforeSlideshowAction_slide2( としてレンダリングされます。 )、しかし、呼び出されると、 beforeSlideshowAction_slide1() という関数のみが存在します。すべての JavaScript 関数は、ページの初期ロード時にのみ登録されると想定しています。
更新された関数を含むスクリプト ブロックで eval を呼び出して、同様の問題を別の方法で解決したことを覚えています。
{# comment: from here the document will be updated by Ajax #}
<div id="slideshowbody">
{# comment: ordernumber is now 1 #}
<div id="slide{{ ordernumber }}">
//some content goes here
<script>
function beforeSlideshowAction_slide{{ ordernumber }}() {
//assign appropriate value to videoContent for current slide
videoContent[{{ ordernumber }}]='video={{ data0 }}&height={{ data1 }}&width={{ data2 }}&codec={{ data3 }}&fullscreen={{ data5 }}';
}
</script>
</div>
{# comment: ordernumber is now 2 #}
<div id="slide{{ ordernumber }}">
//some content goes here
//slide 2 doesn't have a function for a "beforeSlideshowAction"
</div>
</div>
存在しない関数を呼び出している可能性があることを心配しないでください。try/catch ブロックで呼び出します。try/catch でスライドごとに beforeSlideshowFunction が呼び出されるように設定しました。 slide-template 必要に応じてそこで関数を定義するだけで、そうでない場合はスキップします。