我正在寻找一种最简单的方法来实现Rails应用程序中的文本输入字段的"suggest“特性。其思想是完成存储在数据库列中的名称,在用户键入时为用户提供可能匹配的下拉菜单。
谢谢你的建议!
发布于 2008-10-14 14:26:56
Rails使用text_field_with_auto_complete
方法使文本字段上的“建议”式自动补全变得非常容易。
在Rails1.x中,这个方法内置于ActionView::Helpers::JavaScriptMacrosHelper
中,但是在Rails2.x中,它被移到了a separate plugin中。
假设您有一个名为Post
的模型,它有一个名为title
的文本字段。在通常使用text_field_tag
(或f.text_field
)的视图中,只需使用text_field_with_auto_complete
即可:
<%= text_field_with_auto_complete :post, :title %>
此外,在PostsController
中,您必须做出相应的声明:
class PostsController < ApplicationController
auto_complete_for :post, :title
end
这在幕后执行的操作是向控制器动态添加一个名为auto_complete_for_[object]_[method]
的操作。在上面的示例中,此操作将称为auto_complete_for_post_title
。
值得指出的是,这个自动生成的操作使用的find
调用将跨所有模型对象执行,例如Post.find(:all, ...)
。如果这不是您想要的行为(例如,如果想根据登录的用户将搜索限制到特定的Post
子集),那么您必须在控制器中定义自己的auto_complete_for_[object]_[method]
操作。
发布于 2008-10-11 19:07:36
Ruby on Rails提供了Prototype framework。这个框架由Script.aculo.us使用,它提供了一个autocompleter control,可以提供您正在寻找的功能。
发布于 2008-10-11 19:08:37
编辑:我将把这个答案留在这里作为一种理论参考点,但听起来autocompleter answer可能对您更有用:)
免责声明:虽然我在Google工作(它在各种UI中明显有"Suggest“元素),但我没有看过这方面的任何代码,甚至没有与任何人讨论过客户端方面的问题。
服务器端语言在这里可能无关紧要。重要的一点是客户端所需的AJAX。
我建议你有一个大约1秒的计时器(尝试找到一个最佳位置),每当用户在文本框中输入键击时,该计时器将被重置,如果用户导航离开文本框,该计时器将被取消。如果计时器触发,让它触发一个AJAX请求。AJAX请求将包含到目前为止用户键入的内容。AJAX响应应该是建议列表和原始请求文本。
当AJAX响应返回时,如果textbox中的文本仍然与响应中的字段相同(即用户自那以后没有键入),并且如果textbox仍然具有焦点,则提供一个下拉列表。(必须有数百个关于HTML组合框的示例页面才能完成这方面的工作。)
服务器所需要做的就是通过执行搜索并适当地格式化响应来响应AJAX请求-这比客户端简单得多!
希望这能有所帮助--很抱歉没有任何示例代码,但我怀疑这很复杂,而且我不是一个真正的JavaScript开发人员。
https://stackoverflow.com/questions/194450
复制相似问题