Использование представлений встроенное представление и jquery


Я вызываю блок в шаблоне примерно так:

echo views_embed_view('sessions_by_track', 'block_1');

Где блок на самом деле является отображением вида. Он настроен на вывод списков html, и я хочу сделать с ним некоторые вещи jquery, в том числе скрыть определенные элементы, пока не будет нажато что-то еще.

Вот как выглядит код списка:

<ul data-role="listview">
  <li data-role="list-divider"><a href="/tracks/big-picture-0">Big Picture</a></li>

  <li class="views-row">  
    <div class="views-field-title">
      <span class="field-content"><a href="/sessions/tracks/partnering">Partnering for Success</a></span>
    </div>
  </li>

  <li class="views-row">  
    <div class="views-field-title">
      <span class="field-content"><a href="/sessions/tracks/the-shopper-economy">The Shopper Economy</a></span>
    </div>
  </li>
</ul> 

У меня есть scripts.js файл, который выглядит следующим образом:

$(document).ready(function() {
  alert('test');
 $('li.views-row').hide();
});

Предупреждение работает, а скрытие - нет. Однако, когда я запускаю эту строку в Firebug's консоль после завершения загрузки страницы скрытие действительно работает. Таким образом, кажется, что представление отображается после запуска document.ready. Кажется, я припоминаю, что читал что-то об этом раньше, и решение было, но, конечно, теперь, когда оно мне нужно, я ни за что на свете не смогу его найти. Что мне нужно сделать, чтобы обойти это?

Отредактировано для добавления: Drupal 6, Views2

Отредактировано снова, чтобы добавить: Я также пробовал это: в template.php добавлена эта функция:

function mobile_jquery_preprocess_page(&$vars, $hook) {
  $vars['embedded_sessions'] = views_embed_view('sessions_by_track', 'block_1');
  $vars['scripts'] = drupal_get_js();
}

А затем вызываю его в мой шаблон страницы выглядит так:

print $embedded_sessions;

Тот же результат.

Отредактировано еще раз, чтобы добавить, что я попытался добавить новый регион в свой шаблон, назначить блок этому региону, а затем распечатать его с помощью print $mobileContent; в шаблоне страницы. Тот же результат - предупреждение запускается при загрузке, но скрытие не выполняется. Скрытие отлично работает в консоли Firebug, поэтому я знаю, что селектор в порядке.

Отредактировано еще раз для @tim.plunkett

В файл под названием scripts.js, расположенный в сайты/все/темы/mobile_jquery/скрипты, я добавил это (сейчас в файле больше ничего нет):

(function ($) {
  console.log('behavior triggered');
  // Store our function as a property of Drupal.behaviors.
  Drupal.behaviors.myHomeHideLists = function (context) {
    // Find all the li items inside context that have our desired class
    $('li.views-row)', context)
      // hide them.
      .hide();
  };

}(jQuery));

В template.php, Я добавил это (на основе этого ответа):

function mobile_jquery_preprocess_page(&$vars, $hook) {
  $vars['embedded_sessions'] = views_embed_view('sessions_by_track', 'block_1');
  drupal_add_js(drupal_get_path('theme', 'mobile_jquery').'/scripts/script.js', 'theme');
  $vars['scripts'] = drupal_get_js();
}

Консоль.журнал запускается и печатается, но элементы списка, соответствующие селектору, не скрываются.

Author: Community, 2012-01-27

1 answers

Drupal предоставляет особый способ добавления JS на страницу, чтобы гарантировать, что она запускается всякий раз, когда содержимое загружается в DOM. Таким образом, он будет выполняться после загрузки документа, но также и после операций AJAX.

Они называются поведением Drupal .

 1
Author: tim.plunkett, 2012-01-28 16:13:26