簡體   English   中英

在Rails / Javascript中渲染部分簡單表格

[英]Render simple form partial in Rails/Javascript

我想在javascript erb文件中部分渲染表單。 當我將它放在那里時,它沒有方法錯誤。 有任何想法嗎?

script.js.erb

$(document).ready(function() {
    $(".enquiry-button").click(function(e) {

    e.preventDefault();
    e.stopPropagation();

    if ($(this).parents('.cell').find('form').length == 0) {
        $(this).closest('.cell').append(
            "<div class='enquiry-form'>" +
            "<%= escape_javascript( render '/static/form' ) %>" +

            "</div>");


        $(this).closest('.cell').find(".enquiry-form:last").slideDown("slow");
    } else {
        $(this).closest('.cell').find(".enquiry-form:last").slideToggle("fast");
    }

});
});

_form.html.erb

<%= simple_form_for @user do |f| %>
            <%= f.error_messages %>
            <%= f.input :email %>
            <%= f.button :submit %>
<% end %>

錯誤

NoMethodError in Static#home
Showing /Users/colton/kitchen_ninja/kitchen_ninja/app/views/layouts/application.html.erb     where line #6 raised:

undefined method `render' for #<#<Class:0x007f90cc875c80>:0x007f90cd2017e0>
  (in /Users/colton/kitchen_ninja/kitchen_ninja/app/assets/javascripts/script.js.erb)
Extracted source (around line #6):

您正在將兩個獨立的事物混合在一起。 render需要在服務器上運行。 JavaScript的工作只是發出AJAX請求並獲取資源。

因此,假設您要這樣做:

$.ajax(url: "/test").done(function(html) {
    $("#results").append(html);
});

AJAX的唯一作用是獲取遠程資源並解析結果。

在Ruby中,您可以使用render發出HTML:

<%= escape_javascript( render '/static/form' ) %>

只需確保將AJAX請求指向正確的資源,以便Ruby可以完成其余的工作。

由於您使用.erb預處理腳本, .erb可以使用Ruby的字符串插值在JavaScript文件中以字符串文字形式返回partial。

html = "<div class='enquiry-form'>" +
         "#{j render partial: 'static/form'}}" +
       "</div>"
$(this).closest('.cell').append( html );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM