以我的红宝石形式,
$('#some_id').change(function(){
var value = $(this).val();
var index = $(this).attr('id').to_i;
$('option_value_0').html('<%= escape_javascript render partial: 'color_form', locals: { f: f, index: index, id: value } %>')
})
这是javascript部分。由于
,它会引发错误未定义的方法索引和值。
我该如何解决这个问题?提前致谢。
答案 0 :(得分:1)
您无法使用JavaScript在HTML页面中注入ruby代码。在将生成的HTML页面发送到浏览器之前,在服务器上处理ERB模板。您可以在浏览器加载页面后查看页面来源,但您不会看到任何<%= ... %>
标记,因为它们已由服务器呈现。
您的JavaScript会在浏览器中添加ruby代码,但浏览器无法理解ruby。
您可能希望查看支持部分(或模板)的JavaScript框架,例如AngularJS。
答案 1 :(得分:1)
Ce ne pas possible,mon ami。
正如评论中所提到的,Ruby是服务器; javascript是客户端。这意味着以下两件事之一:
要使其正常工作,您需要通过ajax发送请求:
#config/routes.rb
get "color_form", to: "application#color_form"
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
respond_to :js, :html
def color_form
@id = params[:id]
@value = params[:value]
end
end
#app/views/application/color_form.js.erb
$('option_value_0').html('<%=j render partial: 'color_form', locals: { index: @index, id: @value } %>')
这需要通过适当的途径来解决。控制器动作:
color_form
-
是,这是啰嗦,但它是正确的方式。
如果您想要快捷方式,则可以预加载id
部分,然后使用javascript功能更改value
或modals
参数。如果你愿意,我可以写下这个。
<强>预压强>
如果你想在没有 ajax的情况下这样做,标准方式(这也包括#view
<div class="hidden">
<%= render partial: 'color_form', locals: { f: f, index: "x", id: "y" } %>
</div>
#app/assets/javascripts/application.js
$(document).on("change", "#some_id", function(e) {
$partial = $(".hidden").html();
$partial.find("#id").html($(this).attr('id').to_i);
$partial.find("#index").html($(this).val());
$('option_value_0').html($partial);
});
)是将部分附加到你的页面并“隐藏”它。
这样,您的JS就会显示或附加到页面的其他部分的实际HTML代码:
{{1}}