バックボーンルーターを使用して、部分ビューをロードするYiiアクションへのajax呼び出しを行います
this->renderPartial('_foo',null,false,true);
しかし、同じ ajax 呼び出しを複数回使用すると問題が発生し、すべてのスクリプトが部分ビューから何度も読み込まれ、アプリが壊れます。
同じアクション呼び出しパターンを使用してこれを修正する方法はありますか? そうでない場合、どうすれば Yii と Backbone を連携させることができますか?
バックボーンルーターを使用して、部分ビューをロードするYiiアクションへのajax呼び出しを行います
this->renderPartial('_foo',null,false,true);
しかし、同じ ajax 呼び出しを複数回使用すると問題が発生し、すべてのスクリプトが部分ビューから何度も読み込まれ、アプリが壊れます。
同じアクション呼び出しパターンを使用してこれを修正する方法はありますか? そうでない場合、どうすれば Yii と Backbone を連携させることができますか?
Yii ウィジェットは、追加のスクリプトをロードする必要がある要素を含む ajax 呼び出しを操作する場合、設計が非常に不十分です。
コメントでbool.devによって投稿された解決策は、この問題に対処するための私の好ましい方法ですが、何らかの理由でうまくいかない場合(あなたの場合のようです)、他の方法もあります。
プライマリ ビュー ファイル (partialRender() ではなく、render() で呼び出すファイル) には、次のものが含まれます。
$this->renderPartial('_foo',null,true,true);
これにより、メインページの呼び出し (つまり、ajax 呼び出しの前) にスクリプトが含まれるようになります。3 番目のパラメーターが true になったので、内容を文字列として返しますが、どこにも保存していないため破棄されます。
次に、ajax 呼び出しの場合は、次を使用します
$this->renderPartial('_foo',null,false,false);
あるいは単に
$this->renderPartial('_foo');
最後の 3 つのパラメーターは単なるデフォルトであるためです。
これにより、スクリプトが複数回読み込まれるのを防ぎますが、元のページの読み込みには存在しますが、ajax 呼び出しには存在しないため、スクリプトは引き続き存在します。
ビュー ファイルの内容によっては_foo、特別なファイルを作成する必要がある場合があります。必要なのは、スクリプト ファイルが必要なウィジェットをダミーで使用することだけです。
あなたがやろうとしているのは、メイン ページの呼び出しでウィジェットを強制的に実行してスクリプトを登録し、残りの出力を破棄することだけです。次に、ajax 呼び出しで、processOutput パラメーターを false に設定して、登録されているすべてのスクリプトを無視します。