Coffeescript не может найти пересмотренную версию div - railscast 114

Пытаясь следовать руководству Railscast 114 с бесконечной страницы, используя will_paginate но я получаю ошибку из моего coffeescript:

home.js.coffee

jQuery ->
if $('.pagination').length
  $(window).scroll ->
   url = $('.pagination .next_page').attr('href')
   if url && $(window).scrollTop() > $(document).height() - $(window).height() - 50
     $('.pagination').text("Fetching more products...")
     $.getScript(url)
$(window).scroll()

На линии:

   if $('.pagination').length

Я получаю следующую ошибку:

Uncaught TypeError: Cannot read property 'length' of null

Кажется, что скрипт не читает мой индексный файл, потому что скрипт не может найти ни одного из моих блоков div...

Пожалуйста, помогите... застрял с этой проблемой бесконечной страницы в течение недели.

Обновление coffeescript

jQuery ->
  if $('.pagination').length
    $(window).scroll ->
      url = $('.pagination .next_page').attr('href')
      if url && $(window).scrollTop() > $(document).height() - $(window).height() - 50
        $('.pagination').text("Fetching more products...")
        $.getScript(url)
    $(window).scroll()

2 ответа

Чтобы это работало, вам нужно выполнить селекторы после загрузки DOM. Вы правильно определили функцию в первой строке, чтобы добиться этого, но эта функция (которая выполняется на document.ready) имеет пустое тело.

Проще говоря, отступим весь код, кроме первой строки, на один уровень.

Это было решено путем перемещения coffeescript в application.js, переписав его в jQuery и затем вызвав var $j = jQuery.noConflict(); и добавление знака $ j перед evert $-sign. Не знаю, почему это сработало. Думаю, что это связано с несколькими сценариями, запущенными одновременно.

Теперь это выглядит так:

var $j = jQuery.noConflict();
$j(function() {
if ($j('.pagination').length) {
$j(window).scroll(function() {
var url;
url = $j('.pagination .next_page').attr('href');
if (url && $j(window).scrollTop() > $j(document).height() - $j(window).height() - 50) {
$j('.pagination').text("Fetching more products...");
return $j.getScript(url);
}
});
return $j(window).scroll();
}
})
Другие вопросы по тегам