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();
}
})