ajax リクエストを介してコンテンツをロードするときはいつでも、必要な js 設定/ファイルがコンテンツとともにロードされることを確認する必要があります。
ほとんどの場合、コンテンツのロード中に drupal_add_js() によって埋められる $javascript 静的変数はブラウザーに送信されませんが、これは手動で行うことができます。
// ビューのコンテンツを取得します。
$view = views_embed_view($name, $display_id);
// JavaScript データを取得します。
$js = drupal_add_js(NULL, NULL, 'ヘッダー');
// クライアント側で処理するデータを準備します。
$settings = drupal_to_js(call_user_func_array('array_merge_recursive', $js['setting']));
// 収集した $settings で Drupal.settings を拡張するようにクライアントに指示します。
$script = '<script type="text/javascript">
jQuery.extend(true, Drupal.settings, ' . $settings . ');
</script>';
drupal_set_header('Content-Type:text/html; charset=utf-8');
$script を印刷します。$view;
出口;
$view = views_embed_view($name, $display_id);
$js = drupal_add_js(NULL, array('type' => 'setting'));
$settings = drupal_json_encode(call_user_func_array('array_merge_recursive', $js['settings']['data']));
$script = '<script type="text/javascript">
jQuery.extend(true, Drupal.settings, ' . $settings . ');
</script>';
drupal_add_http_header('Content-Type', 'text/html; charset=utf-8');
$script を印刷します。$view;
出口;
注 :
アコーディオン ビューが特定の .js ファイルに依存している場合は、このファイルが ajax リクエストが発生するすべてのページ内で提供されていることを確認してください。通常、そのようなページがビューなしで読み込まれる (全ページ読み込み) 場合は、このファイルを明示的にソースする必要があります。
これは hook_page_preprocess() 実装で実現できます:
function moduleName_preprocess_page(&$variables) {
// Include .js to the page so views can rely on in future ajax request
drupal_add_library('system', 'ui.accordion');
drupal_add_js(drupal_get_path('module', 'views_accordion') . '/views-accordion.js');
// Add the css for fixing/preventing accordion issues.
drupal_add_css(drupal_get_path('module', 'views_accordion') . '/views-accordion.css');
// ...
}
... または、コンテンツが要求されたときにファイルを含めることにより (Drupal.settings の場合と同様)、ajax コールバックの $script 変数にスクリプト タグを追加するだけです。
$script .= '<script type="text/javascript" src="sourcefile.js"></script>'
お役に立てれば!