2

以下是 FeesController“显示”操作模板中的代码:

<div id="payers_controls">
      <%= link_to_remote('New payer',
                               :update => "payers_controls", 
                               :url => new_payer_url) 
      %>
</div>

这是 new.rjs - 属于 PayersController “新”操作

page.replace_html "payers_controls", :partial => "form", :object => @payer

这是 PayersController 中的“新”操作

  def new
    @payer = Payer.new(params[:payer])
  end

这是 PayersController 中“新”操作的“表单”部分

   <%= "Damn text to see if this damn partial is rendered properly" %>

然后我点击“新付款人”链接,它使我在“payers_controls”DIV 中呈现纯 JS:

try { Element.update("payers_controls", "Damn text to see if this damn partial is rendered properly"); } catch (e) { alert('RJS error:\n\n' + e.toString()); alert('Element.update(\"payers_controls\", \"Damn text to see if this damn partial is rendered properly\");'); throw e }

为什么这个该死的响应没有包含在 SCRIPT 标签中?我是否需要在页面中为 JS 响应创建另一个带有 SCRIPT 标签的隐藏占位符?

PS 请理解我的愤怒,因为我是 AJAX on Rails 的新手,我想成为一个学究的程序员,而且,我希望我的代码看起来又漂亮又干净。

4

1 回答 1

3

问题是您尝试使用 JS 更新内容两次。

我会从您的 link_to_remote 标记中删除 :update 参数,或删除 RJS 模板。

基本上,Rails 使用 RJS 模板更新页面一次,然后使用来自 link_to_remote 的 :update 回调再次更新它。你不需要两者。由于最好在您的视图中保留尽可能少的代码,因此我会将其删除并保留 RJS 模板。

希望这可以帮助。有什么其他的,请告诉我。

肯特

于 2010-01-11T02:26:10.183 回答