Javascript 如何对模型和控制器进行异步调用,并在视图中获取其值?

Javascript 如何对模型和控制器进行异步调用,并在视图中获取其值?,javascript,ruby-on-rails,ruby,ajax,backbone.js,Javascript,Ruby On Rails,Ruby,Ajax,Backbone.js,我正在尝试在RubyonRails和Backbone.js中创建一个类似即时搜索的应用程序 我已将所有单词存储在名为字典的模型中。它包含所有单词的列表。 现在,我想做一个搜索栏,如果我输入“c”,我想列出所有以“c”开头的单词,同样,如果我输入“ca”,它应该列出所有以“ca”开头的单词 是否有开源应用程序,我可以从中学习?使用jQueryauto_complete,并将AJAX调用与之连接,以从数据库中获取值。请参阅。您可以这样做 在GUI中的Onclick()中,对ruby服务器进行ajax

我正在尝试在RubyonRails和Backbone.js中创建一个类似即时搜索的应用程序

我已将所有单词存储在名为
字典
的模型中。它包含所有单词的列表。 现在,我想做一个搜索栏,如果我输入“c”,我想列出所有以“c”开头的单词,同样,如果我输入“ca”,它应该列出所有以“ca”开头的单词


是否有开源应用程序,我可以从中学习?

使用jQuery
auto_complete
,并将AJAX调用与之连接,以从数据库中获取值。请参阅。

您可以这样做

在GUI中的Onclick()中,对ruby服务器进行ajax调用,将输入的数据作为键

在ruby端使用class变量只加载一次字典数据,这样就不必每次都进行db fetch

现在在ruby端进行正则表达式匹配,并将数据发送到GUI,此ajax调用的onsuccess()将相应地加载GUI小部件


希望我足够清楚。

我还没有测试这段代码。可能会有拼写错误,但我认为它会起作用。请评论,以便我可以编辑,如果它不工作

看法

routes.rb

get "/search/:search" => "dictionaries#search", :as => :search
字典\u controller.rb

def search
 @dictionarys = Dictionary.where("word LIKE ?", params[:search])
end
视图/词典/search.js.erb

$(".results").empty().append("<%= j( render @dictionaries) %>"
$(".spinning").hide()
$(“.results”).empty().append(“”
$(“.spinning”).hide()
视图/字典/_dictionary.html.erb部分

<li><%=dictionary.word%></li>

  • 这是自动完成。我的问题完全不同。我的问题是,如何从字典中列出单词。我的重点是问题的Ajax部分。好的,我明白了。仅进行Ajax调用,您必须编写如下查询:
    @words=Dictionary.all(:conditions=>[“word like?”,“ca%”)
    但此查询将在控制器中,对吗?我想在我的视图中实时显示此查询的结果。@d34th4ck3r,是的。结果将在控制器中。它们必须以JSON格式发送回客户端,并在ajax调用的onsuccess()方法中读取。如何准确地将其发送回客户端(无需刷新页面)?你的解决方案很清楚。但是你能举个例子来帮助我“对ruby服务器进行ajax调用”吗?我无法理解这一部分。你尝试过从GUI对应用程序进行ajax调用吗?我没有发现你的问题。所说的只是这个。如果我使用简单的$(“.results”)。append(“aasd”),则不完全是错误它是有效的。也就是说,它在每个键下都附加aasd。但是,使用$(“.results”).append(j render@dictionaries)没有附加任何内容。最后,它是有效的,我使用:$(“.results”).append(“”)此解决方案存在一个问题。我的渲染函数将调用字典中与当前文本匹配的单词数。例如,如果有两个单词与“ab”匹配,即“abcd”和“abxy”,则我将得到以下输出:“abcd”\n“abxy”\n“abcd”\n“abxy”。可能的原因是什么?我添加了$(“.results”)。empty()在回调中(views/dictionarys/search.js.erb)。这将清空键控之间的results div
    $(".results").empty().append("<%= j( render @dictionaries) %>"
    $(".spinning").hide()
    
    <li><%=dictionary.word%></li>