0

我按照本教程将 AJAX 添加到我的 Rails3.1 搜索框(一切正常)。这个搜索框在一个侧边栏中,我想在主列中显示结果。我遇到的问题是我不知道如何正确地做到这一点。

在 AJAX 之前,我有一个 search.html.haml,其中包含显示结果的代码。但是,如果我在此处添加渲染部分调用,则不会显示任何内容(我猜是因为 search.html.haml 没有被调用)

搜索.html.haml

=@events.count
#search=render 'search'

另一方面,如果我将渲染部分调用放在 application.html.haml 中。它确实显示了结果,但在主列的实际内容下方。

应用程序.html.haml

     #central
        %p#notice= notice
        = yield
        #search=render 'search'

我想这是一个简单的修复,但不知道该怎么做。

提前致谢!!!

_search.html.haml

 -@events.each do |event|
   #user_block
     #user_block_pic
      = image_tag(event.pic.url(:medium), class: 'event_block_image', :alt =>'Event Picture')
      ....more stuff

搜索.js.erb

  $('#search').html("<%= escape_javascript( render(:partial => 'search') ) %>");

我该怎么做才能摆脱主列(#central)上的内容并在那里显示结果?

固定的!!!!工作中!!!!(因为我必须等待几个小时才能发布答案,所以我在这里做)

我不确定这是正确的编码,但对我有用。我所做的是摆脱中间文件 search.html.haml(见上文)

现在的配置是这样的:

应用程序.html.haml

   #central
        %p#notice= notice
        = yield

_search.html.haml

#search
 =@events.count
 -@events.each do |event|
   ...stuff

资产/javascript/search.js

 $(function(){ 
$("#search .pagination a").live("click", function(){   #this is for pagination
    $.getScript(this.href);
    return false;
});
$('#events_search').submit(function () {  #this is for the search form
    $.get(this.action, $(this).serialize(), null, 'script');
    return false;
  });
 });

意见/事件/search.js.erb

  $('#central').html("<%= escape_javascript( render(:partial => 'search') ) %>");

这对我来说可以。希望这可以帮助其他人。

谢谢

4

1 回答 1

0

当您从 ajax 调用中调用搜索方法时,我猜它想要渲染search.js.erb或 haml,但我不使用 haml,只使用 erb。

那么你创建一个search.js.erb,这是我的一个例子search.js.erb

$("#user-browser").replaceWith("<%= escape_javascript render(:partial => 'list') %>");
$("#tabs-interval").replaceWith("<%= escape_javascript render(:partial => 'tabs-interval') %>");

所以我的 erb 所做的就是使用 jquery 来查找我想要更新 html 的 div,使用呈现的部分并替换其中的 html。

我的部分在erb中看起来像这样:

文件list.html.erb::

<div id="user-browser">
  <span>more html stuff</span>
</div>

文件tabs-interval.html.erb::

<div id="tabs-interval">
  <span>more html stuff</span>
</div>
于 2012-04-20T15:49:02.457 回答