js.erb仅在第一次被调用

时间:2012-04-07 20:24:02

标签: ruby-on-rails ajax

在我的rails 3应用程序中,有一个带有 onchange 事件的 select_tag ,该事件会发送一个ajax请求:

f.select 'forma_id', @collection, {:include_blank => true}, {:onchange => "goAjax('/lancamentos/receber_forma', this.value)", :class => 'btn'}

其中, goAjax 是:

function goAjax(_url, _value) {
  $.ajax({url: _url, data: 'value=' + _value, dataType: 'script'})
}

lancamentos_controller #receber_forma 是(简化版):

def receber_forma
  @lancamento = Lancamento.new(:forma_id => params[:value])
  logger.info 'forma_id = ' + @lancamento.forma_id
  respond_to do |format|
    format.html { render :new }
    format.js
  end
end

receber_forma.js.erb

$('div#cartoes').replaceWith("<%= escape_javascript(label_tag(@lancamento.forma_id)) %>");

正在发生的事情是,当我在该选择上选择一个值时,标签上呈现的值始终是第一次调用时发送的值。以下值更改只是不更改标签文本。方法receber_forma中的记录器显示始终发送新的选定值。

有人知道我在这里做错了吗?

。:接受任何英语错误

1 个答案:

答案 0 :(得分:1)

您已完全使用标签替换div#cartoes,因此代码第二次运行时,找不到div ID cartoes。您可能希望使用.html代替.replaceWith,以便标签成为div的内容,而不是完全替换它:

$('div#cartoes').html("<%= escape_javascript(label_tag(@lancamento.forma_id)) %>");