簡體   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