ボタンを使用するたびに、ボタンを使用して埋め込みビューをロードするモジュールがあります。
// function to print builder view
function workout_builder_template() {
$viewName = 'builder_view';
print views_embed_view($viewName);
}
workout_builder_template();
ただし、ボタンが押された後、新しいビューがロードされ、ビューはもはやajax化されません。たとえば、公開されたフォームを変更した後で適用ボタンをクリックすると、フォームは新しいページに送信されます。 ajaxを介して埋め込みビューをロードするボタンをクリックする前に、公開されたフォームがajaxを介してビューのコンテンツを変更しました。
これは、ajaxifiedビューからのhtmlの例です
<form accept-charset="UTF-8" id="views-exposed-form-builder-view-default" method="get" action="/drupal7/builder-view" class="ctools-auto-submit-full-form ctools-auto-submit-processed jquery-once-1-processed">
これはajaxレスビューからのhtmlの例です
<form accept-charset="UTF-8" id="views-exposed-form-builder-view-default" method="get" action="/drupal7/builder-view" class="ctools-auto-submit-full-form">
この例では、ajaxなしビューに処理済みクラスが追加されていません。これから、最初のajaxイベントの後で、新しいビューにJavaScriptがアタッチされていないのではないかと思います。私はdrupal.behaviorsを研究していて、印刷について考えていました
$vars['scripts'] = drupal_get_js();
print $vars['scripts'];
上に表示されたworkout_builder_template()関数内ですが、これがどのように行われるかわかりません
私はここで間違っている可能性がありますが、埋め込みビューのフェッチとクライアント側でのHTML更新がカスタムJavascriptコードを使用して行われたと想定します。
新しいHTMLがカスタムの方法でDOMに追加されたら、XHRクライアントのsuccess
コールバック内から、アクティブモジュールによって定義されたすべてのDrupal動作をアタッチします(たとえばjQuery.ajax()
)手動で呼び出す必要がある場合があります。
_// $wrapper here is the jQuery object identifying the wrapper element to
// which your new HTML has been injected to. Eg. $wrapper = $('.my-view-wrapper')
Drupal.attachBehaviors($wrapper, Drupal.settings);
_
私が推奨するのは、Drupal AJAX API( Documentation ))を使用して、これを維持できるようにすることですrefreshサーバー側のロジック(1か所)。もう1つの明らかな利点は、Drupal.attachBehaviors()
が自動的に呼び出されることです。