提问人:thermans 提问时间:5/18/2012 更新时间:5/18/2012 访问量:237
Rails 在 javascript 调用后更新 DIV(从模型重新加载)
Rails Updating a DIV (with reload from model) after a javascript call
问:
好的,我有一个页面,向客户显示他有多少小部件。这是视图(haml):
#available
= "Available widgets: #{@customer.widgets.unused.count()}"
(“未使用”是模型中显示可用小部件的范围)。
当客户使用带有“:remote => true”的表单兑换 Widgets 时,一些 javascript 会在带有动画的页面上放置一个漂亮的 DIV,并且控制器会更新模型。
控制器如下:
def redeem
@customer = Customer.find(params[:customer_id])
number = params[:amount].to_i
unless @customer.widgets.unused.empty?
number.times do
@customer = Customer.find(params[:customer_id])
widget = @customer.widgets.unused.first # Grab first unused pass
widget.status = "Redeemed"
widget.save!
end
else
@pay = "true"
# customer.widgets.new
end
# redirect_to @customer
end
这是javascript(js.erb):
var number = <%= params[:amount] %>;
<% if @pay.eql? "true" %>
$("#widget-pay").modal('toggle');
<% else %>
while (number > 0) {
var item = $('<div class="widget-show">...</div>');
$('#allwidgets').isotope('insert', item);
number --;
}
<% end %>
我的问题是我现在想用新的 Widget 计数更新“#available”DIV。我该怎么做?
在最坏的情况下,我可以重新加载页面,以便再次从模型中提取数据,充其量只是更新 DIV。我似乎也无法从 javascript 中做到这一点。
答:
1赞
Todd Baur
5/18/2012
#1
你可以做这样的事情:
render :js => "$('#available').append(widget)"
widget.save!
评论