2015-12-10 45 views
2

這通過字符串productID而不是變量哪個== 5。我怎樣才能傳遞變量,而不是字符串?傳入變量escape_javascript

也試過:

$("#productModal").html("<%= escape_javascript(render 'layouts/modal', :product_id => " + productID + ").html_safe %>"); 

這也只是輸出的+ productID +代替5

+0

據我所知你在前端指定的productID,但你嘗試呈現與可變後端ERB您分配的前端。服務器首先渲染它,並且它不執行任何html/javascript,所以它不知道你的變量。目前還不清楚您嘗試實現的目標,但是您使用此代碼的方式不可行。抱歉。可能如果你想澄清你想要做什麼,我可以給出正確的答案。 – Fedcomp

+0

@Fedcomp我想呈現一個引導模式,這取決於用戶點擊哪個'product'。模式應該根據'product_id'而變化。 – Onichan

+0

您應該在頁面html中放置帶prerendered html和'visible:hidden'的引導模式窗口,然後使用引導方法使其彈出。您應該只在這裏使用JavaScript來實際觸發它。 Erb將獨立渲染它,而不需要JavaScript。 – Fedcomp

回答

1

如果你想解決您所提供的代碼,你最好做以下幾點:

<script> 
$(document).ready(function(){ 
    $(".test").click(function(){ 
     var productID = 5; 
     $("#productModal").html("<%=j render('layouts/modal', product_id: " + productID + ").html_safe %>"); 
     $("#modal").modal(); 
    }); 
}); 
</script> 

但是這個代碼有幾個大問題。


不顯眼的

首先,爲什麼您使用<script>標籤?

這表明你已經把它放在視圖中,這是非常糟糕的做法。

最有效的方法是使用unobtrusive javascript模式,這是Rails的asset pipeline能夠支持:

#app/assets/javascripts/application.js 
$(document).on("click", ".test", function(e) { 
    var productID = 5; 
    $("#productModal").html(productID); 
    $("#modal").modal(); 
}); 

這不僅意味着你能夠使用這個代碼整個您的應用程序(模塊),也保證你能夠調用正確的

-

無障礙

其次,你會注意到我已經排除了上面的代碼escape_javascript

這是因爲資產管道不處理ERB/Rails代碼

Javascript是客戶端; Rails是服務器端的。

這很重要,因爲當你打電話給render等 - 你的JavaScript將無法做到這一點,除非它是從服務器調用,尤其是如果部分需要一個設置在DOM負載上的變量。

對於這一點,你需要使用ajax

#config/routes.rb 
get "modal", to: "application#modal" 

#app/controllers/application_controller.rb 
class ApplicationController < ActionController::Base 
    def modal 
     @productID = params[:product_id] 
     respond_to do |format| 
     format.js { render "layouts/modal", product_id: @productID } 
     end 
    end 
end 

#app/assets/javascript/application.js 
$(document).on("click", ".test", function(e) { 
    var productID = 5; 
    $.get("modal", {product_id: productID}, function(data) { 
     $("#productModal").html(data); 
     $("#modal").modal(); 
    }); 
}); 

這裏的一個小小的警告,如果追加.erb JS文件(javascripts/application.js.erb),你就可以使用render。但是,這個只有發生在文件被調用時;因此將任何變量傳遞給partial將不起作用。


更新

這裏到底是什麼工作:

#app/assets/javascripts/application.js 
$(document).on("click", ".testinggg", function(e) { 
    var productID = 5; 
    $.get("modal", {product_id: productID}, function(data){ 
    $("#productModal").html(data); 
    $("#modal").modal(); 
    }, "html"); 
}); 
+0

感謝您的建議。我會仔細閱讀它。但是,您爲當前代碼提供的修復仍然只是傳遞'+ productID +',而不是'5'。 – Onichan

+0

嗯沒關係。如果您仔細閱讀了其他內容,我會爲您更新 –

+0

點擊以下代碼後出現錯誤:GET GET http:// localhost:3000/modal?product_id = 5 404(Not Found) – Onichan