在通过ajax更新时使用jquery ui滑块时出现以下错误:
ActionView::Template::Error (undefined method `model_name' for Fixnum:Class):
1: $("#x_stock_list").html("<%= escape_javascript(render(@date_range)) %>");
app/views/home/index.js.erb:1:in`_app_views_home_index_js_erb__1074827181885368454_2504361900'
我的jquery滑块功能如下所示:
<script type="text/javascript">
$(function() {
$( "#x_slider" ).slider({
range: true,
step: 1,
min: 1,
max: 52,
values: [1, 52 ],
stop: function(event, ui) {
var url_param = $('#x_slider').slider('option', 'values');
$('#x_low_selected').html(ui.value);
$.ajax({
type: "GET",
data: ({ weeks: url_param[0] }),
url: $(this).attr('data-href'),
dataType: 'script'
});
}
});
});
</script>
在我的家庭控制器中,我有这个:
def index
unless params[:weeks]
@date_range = 4
else
@date_range = Home.filter(params[:weeks])
end
end
在我的模特中:
def self.filter(weeks)
timeago = weeks.to_i
end
最后,在我的index.js
中 $("#x_stock_list").html("<%= escape_javascript(render(@date_range)) %>");
当我拖动滑块时,该值显示正常:
Parameters: {"weeks"=>"8", "_"=>"1327514933685"}
然而它会引发错误。
如果我手动浏览网址http://localhost:3000/?weeks=9,一切正常。
有人可以解释我在这里做错了吗?
答案 0 :(得分:4)
此处不需要render方法,其目的是渲染部分,文件或文本。你传递的是4号。
您不需要escape_javascript代表一个数字,因为它需要一个响应gsub的类。
#From the above link:
result = javascript.gsub(%r(\\|<\/|\r\n|\3342\2200\2250|[\n\r"'])/) {|match| JS_ESCAPE_MAP[match] }
javascript.html_safe? ? result.html_safe : result
使用:
$("#x_stock_list").html("<%= @date_range %>");
或将其转换为字符串:
$("#x_stock_list").html("<%= @date_range.to_s %>");
对于过去的高级图表,我做了类似的事情:
$.getJSON('traffic_sources.json', null, function(data) {
pie_chart("traffic_sources_graph", data.traffic_sources);
});
function pie_chart(div, data)
{
new Highcharts.Chart({
chart: {
renderTo: div,
backgroundColor: '#dddddd'
},
series: [{
type: 'pie',
name: 'Browser share',
data: data
}]
});
}