我的目标是使用coffeescript从视图中的number_field
读取值,将值发送到控制器,然后将控制器中的数值发送回视图。
在coffeescript文件中,我使用console.log(qty)
作为检查,看看coffeescript是否能够读取number_field
值。这张支票通过了。
在控制器中,我使用puts "received #{@n}"
和puts "not received"
作为检查。在页面加载时,else
部分应该执行,因为.change
事件尚未触发。当数字字段改变时,if
部分应该执行。此测试正确通过。更改数字字段后,@n
的正确值将打印到rails控制台。这意味着控制器操作会收到params[:quantity]
。
最后一步是让$('#insert-here').load(location.href+" #insert-here")
重新加载页面上的#insert-here
div
。为了检查这一点,我在视图中添加了<%= Time.now %>
以查看时间戳更改。此测试也会通过,但视图中的<h1><%= @n %></h1>
会继续显示数字1
。它没有更新。我该如何解决这个问题?
查看
<%= oi.number_field :quantity, value: 1, class: 'form-control', id: 'quantity-select', min: 1 %>
<div class="col-xs-12" id="insert-here"><h1><%= @n %></h1><h2><%= Time.now %></h2></div>
的CoffeeScript
ready = ->
$('#quantity-select').change ->
qty = document.getElementById('quantity-select').value
$.ajax
complete: (request) ->
data: { quantity: qty }
console.log(qty)
$('#insert-here').load(location.href+" #insert-here")
return
return
$(document).ready(ready)
控制器
def show
if params[:quantity].present?
@n = params[:quantity]
puts "received #{@n}"
else
@n = 1
puts "not received"
end
end