在轨道中无尽滚动

时间:2014-02-03 13:09:47

标签: javascript ruby-on-rails infinite-scroll

我提到http://railscasts.com/episodes/114-endless-page?autoplay=true在我的项目中使用无休止的滚动。在视频中他提到的一切都是旧的我猜,所以我尝试将其修改为rails 4. javascript文件是

                     var currentPage = 1;

                        function checkScroll() {
                             if (nearBottomOfPage()) {
                                  currentPage++;
                                  new Ajax.Request('/shirts/first?page=' + currentPage, {asynchronous:true, evalScripts:true, method:'get'});
                                  } else {
                                  setTimeout("checkScroll()", 250);
                             }
                          }

                        function nearBottomOfPage() {
                           return scrollDistanceFromBottom() < 150;
                        }

                        function scrollDistanceFromBottom(argument) {
                           return pageHeight() - (window.pageYOffset + self.innerHeight);
                        }

                        function pageHeight() {
                           return Math.max(document.body.scrollHeight, document.body.offsetHeight);
                        }

                        document.observe('dom:loaded', checkScroll);

而不是使用rjs文件,我在.js.erb

中编写了以下代码
                    if @first.total_pages > @first.current_page
                         page.call 'checkScroll'
                    else
                         page['#loading'].hide
                    end

我做得对吗?当我用firebug检查我的浏览器时,它说:

                      TypeError: document.observe is not a function
                      document.observe('dom:loaded', checkScroll);

我的代码出了什么问题?有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我认为railscast示例使用prototype.js而不是jQuery,我猜你在Rails 4应用程序中使用jQuery,因为我认为document.observemethod in prototype,而不是在jQuery中。

你可能想查看revised episode for endless scrolling,遗憾的是它不是免费的,但Railscast的Ryan Bates也在github上分享了他的代码,所以你可以看到修改后的剧集code on github,即Rails 3.1并使用jQuery可能更容易移植到Rails 4。

希望这有帮助。