升级旧的Rails应用程序,我希望使用不引人注目的javascript从原型切换到Jquery。
我在public / javascripts / application.js中定义了一个javascript函数js_avancements(当我切换到资源管道模式时,此函数将移动到另一个js文件)。
function js_avancements (nb_bars, bars_values, bars_names) {
// test code
alert(nb_bars);
for (var i=0; i<nb_bars; i++) {
alert(bars_names[i] + " : " + bars_values[i].toString());
}
}
我在控制器(Rails 2 / prototype)中的旧功能是
def avancements
# Here I get values from DB
# nb_bars = integer
# bar_values = array of integers
# bar_names = array of strings
render :update do |page|
page.replace_html "menu_avancement", :partial => "menu_avancement"
page.replace_html "show_avancement", :partial => "show_avancement_clean"
page.call 'js_avancements', nb_bars, bar_values, bar_names
end
end
新版本(Rails 3 / JQuery)
在控制器中:
def avancements
# Here I get values from DB
# @nb_bars = integer
# @bar_values = array of integers
# @bar_names = array of strings
# Values for test
@nb_bars = 4
@bars_values = [10,17,12,8]
@bars_names = ['Aaa', 'Bbb', 'Ccc', 'Ddd']
respond_to do |format|
format.js { render "update_avancements" }
end
end
我的观点(update_avancements.js.erb)
$('#menu_avancement').html('<%= escape_javascript(render(:partial => 'menu_avancement')) %>');
$('#show_avancement').html('<%= escape_javascript(render(:partial => 'show_avancement_clean')) %>');
$(document).ready(function() {
js_avancements(<%=@nb_bars%>, <%=@bars_values%>, <%=@bars_names%>);
});
我无法在javascript函数中从数组(bar_values&amp; bar_names)获取值。 如果我只使用整数或字符串参数调用我的javascript函数,一切正常,但数组没有任何反应。
我做错了什么? 谢谢你的帮助。
PS:对不起我的英文,欢迎您更正!
答案 0 :(得分:0)
最后一个论点是最有可能给你一个问题的。我打赌js响应看起来像
js_avancements(4, [10,17,12,8], ["Aaa", "Bbb", "Ccc", "Ddd"])
使用to_json
或to_s
与html_safe
一起解决此问题。
js_avancements(<%= @nb_bars.to_s.html_safe %>, <%= @bars_values.to_s.html_safe %>, <%= @bars_names.to_s.html_safe %>);