0

我一直在关注几个 railscasts,目前有一个使用 will_paginate 的带有无尽页面的产品列表。我想实现 railscast #240 以在结果中添加实时搜索,但似乎存在一些逻辑冲突,我不确定如何纠正。

简单来说,index.js.erb 里面的无尽页面需要使用 append 在当前产品列表下方添加更多产品:

$('#products')。append ('<%= j 渲染(@products) %>');

然而,实时搜索实现需要用搜索结果中的新产品替换当前的产品列表:

$('#products')。html ('<%= j 渲染(@products) %>');

这是完整的块:

    $('#products').html('<%= j render(@products) %>');  // live search
    $('#products').append('<%= j render(@products) %>'); // endless page
    <% if @products.next_page %>
        $('.pagination').replaceWith('<%= j will_paginate(@products) %>');
    <% else %>
        $('.pagination').remove();
    <% end %>

html() 和 append() 都非常适合它们各自的用途,如果我注释掉其他作品,但如果我不注释掉其中一个,它就会变得非常不稳定。

我该如何设置它,如果用户在搜索框中输入它会触发 html(),如果用户滚动它会触发 append()?有什么方法可以确定哪个事件触发了 index.js.erb 调用?

4

1 回答 1

0

想出来以防万一它出现在其他人身上。对于大多数有经验的 Rails 人来说可能很明显,但作为一个新手,这对我来说是一个全新的概念。

我将搜索结果重构到另一个控制器和视图中,这让我可以使用单独的 js.erb 文件来替换 #products 的内容,同时产品控制器处理滚动的无限页面。

所以现在我有意见>产品>index.js.erb 使用 $('#products').append 和意见>结果>index.js.erb for $('#products').html 等

我还必须为我的路由文件创建一个 results_controller.rb 索引操作以及一个结果资源。

之后两者同时工作。

于 2013-04-17T15:42:24.027 回答