【问题标题】:JS templates render but nothing happens in Rails 3.0.7JS 模板呈现,但在 Rails 3.0.7 中没有任何反应
【发布时间】:2011-06-24 20:55:39
【问题描述】:

show.html.erb:

...
<%= link_to "Start Retrieval", {:action => "retrieve"}, :remote => true %>
<div id="notices">
       <%= render :partial => 'notice' %>  
</div>
....

_notice.html.erb:

<div>Notice</div>

检索.js.erb:

#alert('test') //=> does not work
$('#notices').append("<% escape_javascript render :partial => 'notice' %>");

控制器:

def retrieve
    respond_to do |f|
       #f.js {render :js => "alert(typeof jQuery != 'undefined')"} #=> true
       f.js {render :js => "retrieve"} #=> nothing happens
    end
end

输出:

Started GET "/model/1/retrieve" for 127.0.0.1 at 2011-06-24 21:09:44 +0100
  Processing by ModelController#retrieve as JS
  Parameters: {"id"=>"1"}
Completed 200 OK in 50ms (Views: 49.2ms | ActiveRecord: 0.0ms)

如您所见,retrieve 动词不直接涉及模型,并且我没有将 @model var 传递给模板。我的印象是这只是简写,不应该影响事情。我错了吗?

【问题讨论】:

    标签: javascript jquery ruby-on-rails erb


    【解决方案1】:

    你应该能够做到:

    respond_to do |f|
      f.js {}
    end
    

    这将呈现与操作 (retrieve.js.erb) 同名的 js.erb 文件。

    您正在做的是将字符串“retrieve”呈现为纯 javascript,相当于在 js 文件中仅包含“retrieve”,如下所示:

    &ltjavascript>
    retrieve
    &lt/javascript>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 2020-03-27
      • 2011-05-19
      • 1970-01-01
      • 2018-02-22
      相关资源
      最近更新 更多