在渲染局部视图时传递参数是否可行?

3
我正在使用jQuery UI滑块动态更新页面中的项目。我如何让控制器接收滑块的值?是否可能通过本地传递此类信息?如果是,那么这个本地变量将如何由部分处理?
我目前正在更新整个页面并使用params作为where子句。
@articles = Article.where(:year => params[start_year]...params[start_year]) 我想仅使用jQuery清空此部分并使用滑块设置的值呈现新的局部集合。是否有最佳实践?
1个回答

0

我认为最好的选择是通过ajax调用控制器并通过它传递参数。

然后,使用返回的信息,您应该重新填充需要重新填充的页面部分。

在您的路由中,您需要像这样设置:

get "article/between_years", :controller=>"article", :action=>"between_years"

而在你的控制器中,你会有这个函数

def between_years
  @articles = Article.where(:year => params[start_year]...params[start_year])
  render :layout=>false ### this line makes it so the application.haml (or html.erb) is not rendered along with your code)
end

在 app > views > articles 目录下,您将拥有带有所需 HTML 的 haml 或 erb 文件。

然后,您的 jQuery 将类似于以下内容:

$.get("/article/between_years",{start_year:1991,end_year:2011},function(data, status, xhr){  /// does ajax call to the article route we set up above /
  ..
  $("body").append(data);  ///appends the html data returned to the body
                           ///you will probably want to change this a bit
                           ///so every thing is added to the proper place
  ...
});

我之前写过另一个答案,概述了类似的工作流程,你可能想看一下 => 基于Rails 3中另一个collection_select中选择的项目自动填充text_fields


嘿@BananaNeil,感谢您的快速回复。我不得不在between_years视图中添加了一些jQuery来清空body并附加文章。每次滑块都会进行单独的调用,这导致文章被多次附加。例如,如果您将结束日期从2010年滑动到2005年,则会发布2010-2011、2009-2011、2008-2011等所有文章。不确定我的hack是否仍然是最佳方法,因为仍然正在进行多个调用。我只是在视图中防止它们。 - Oakland510
我根本不认为这是黑客行为。这完全取决于你想要替换什么。你甚至可以使用$("body").html(data);来完全替换body的HTML。如果您可以发布更多信息,我很乐意帮助您找到一个简单的一次调用解决方案。 - BananaNeil
我刚刚意识到UI滑块提供了“滑动”和“停止”事件。我从使用“滑动”事件切换到使用“停止”事件。这样,只有在用户停止滑动后,我才会进行一次调用(与在使用滑块时传递每个值时进行调用相比)。 - Oakland510

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接