繁体   English   中英

通过Rails上的javascript文件ruby渲染部分视图

[英]Rendering partial view through javascript file ruby on rails

我有一个索引文件,其中仅包含google map(通过javascript映射)。 当我搜索某个地方时,它也将其固定在现在很好的地图上。 但是我想要的是,每当我点击地图上的标记时。 它应该在地图下方的同一页上显示一个位置细节分区。 我制作了ajax资产/javascript/customer.js,将URL指向controller / customers / index中的客户控制器,然后得到整个页面作为响应。 那就是我们知道是错误的。 这是我的js文件内容

$.ajax({
  url: "/",
  async: false,
  method: "post",
  data: { "place_id" : place["place_id"] },
  success: function(data){
       alert('success');
     }
   });
   infoWindow.open(map, marker);
   buildIWContent(place);
});

我的控制器功能是

def index
  if params[:place_id]
    @place = Places.find(params['place_id'])
  end
end

这就是我想在索引页面中显示的内容,即html.erb

<% if @place %>
  <div class='place-name'><% @place.name %></div>
<% end %>

我知道Rails支持某些局部,但是我不知道这些局部是否起作用。 我是Rails的新手,所以如果您发现我的问题很傻,请原谅我。 我只是想通过ajax魔术来显示此地名div,无论是通过局部还是通过它。

为了解决您的问题,您必须在此处修改一些代码。 首先,您必须将ajax请求方法和url修改为:

$.ajax({
  url: "/customers",
  async: false,
  method: "GET",
  data: { "place_id" : place["place_id"] },
  success: function(data){
       alert('success');
     }
   });
   infoWindow.open(map, marker);
   buildIWContent(place);
});

完成访问客户索引页面后,它将显示警报。 然后。 在索引方法中,尝试执行以下操作:

def index
  if params[:place_id]
    @place = Places.find(params['place_id'])
  end
  respond_to do |format|
    format.html
    format.js
  end
end

然后。 您必须创建新文件index.js.erb包含

$('.place-name').text('<%= @place %>');

这只是原型。 您必须以自己的方式进行自定义

如果我正确理解了您的问题,则希望将Rails部分渲染为对AJAX调用的响应。 如果是这样的话,那就是错误的思考方式。

Rails只是一个Web服务器。 它返回的文本有效载荷可以是JSON,XML或HTML(以及其他)。 部分模板或ERB模板只是生成的JSON或HTML的抽象。

当您加载页面时,Rails将ERB(以及部分,布局等)编译为HTML有效负载并将其返回。 因此,如果要向端点发出AJAX请求,则将获得所有HTML(包括布局)。 您可以执行类似render layout: false表示不渲染布局,但是您需要一个条件端点或单独的端点才能知道何时渲染布局以及何时不渲染。

通常,对于AJAX请求,社区似乎正在朝此方向发展,而倾向于从JSON服务器响应中进行客户端模板化,但是您仍然可以通过添加layout: false (或所需的任何布局)来做到这一点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM