2

OK、顧客が所有しているウィジェットの数を示すページがあります。ビュー(haml)は次のとおりです。

#available
  = "Available widgets: #{@customer.widgets.unused.count()}"

(「未使用」は、使用可能なウィジェットを示すモデル内のスコープです)。

顧客が「:remote => true」を含むフォームでウィジェットを引き換えると、一部の 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 %>

私の問題は、「#available」DIV を新しいウィジェット数で更新したいということです。どうすればいいですか?

最悪の場合、ページをリロードしてモデルからデータを再度取得することもできますが、せいぜい DIV を更新するだけです。どちらもJavaScriptからできるようには見えません。

4

1 に答える 1

1

次のようなことができます。

render :js => "$('#available').append(widget)"
widget.save!
于 2012-05-17T21:29:55.887 に答える