【问题标题】:Rails 3 Partial Will Not Render Via js.erbRails 3 Partial 不会通过 js.erb 渲染
【发布时间】:2012-12-08 06:48:46
【问题描述】:

我在从控制器获取一些数据后尝试通过 js.erb 渲染部分内容时遇到问题。我已经尝试了很多不同的东西,我就是无法渲染部分。日志文件显示带有 200 OK 消息的部分呈现,但页面上没有任何反应。这篇文章与我遇到的问题类似:

Rails 3 - render partial js.erb

我已尝试按照这篇文章的指导进行操作,但仍然遇到问题。

这是我的部分内容,格式为 __left_date_filter.html.erb =>

    <%= form_tag({:controller => 'events', :action => 'dateFilter'}, :class => 'date_form', :remote => true) do %>
    <%= datepicker_input "event", :start_date, :class => 'dateFilter', :dateFormat => 'mm/dd/y' %>
    <%= datepicker_input "event", :end_date, :class => 'dateFilter', :dateFormat => 'mm/dd/y' %>
    <%= submit_tag "Submit" %>
    <% end %> 

这是生成的HTML =>

    <form accept-charset="UTF-8" action="/events/dateFilter" class="date_form" data-remote="true" method="post">
    <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="authenticity_token" type="hidden" value="x4cbSoYnUu2+W6qvtPnKXvXR8Tp3Yh7BP9W0RMyR02g=" /></div>
    <input class="dateFilter" id="event_start_date" name="event[start_date]" size="30" type="text" /><script type="text/javascript">

    //<![CDATA[
    jQuery(document).ready(function(){jQuery('#event_start_date').datepicker({"dateFormat":"mm/dd/y"})});
    //]]>
    </script>
   <input class="dateFilter" id="event_end_date" name="event[end_date]" size="30" type="text" /><script type="text/javascript">
   //<![CDATA[
   jQuery(document).ready(function(){jQuery('#event_end_date').datepicker({"dateFormat":"mm/dd/y"})});
   //]]>
</script>
    <input name="commit" type="submit" value="Submit" />

这里是 dateFilter.js.erb =>

$('#content').html("<%= escape_javascript(render(:partial => 'dateFilter')) %>");

这里是 events_controller =>

 def dateFilter

   eventIn = params[:event]
   start_date = Date.parse(eventIn[:start_date])
   end_date = Date.parse(eventIn[:end_date])
   sql = *redacted*

   @events = Event.find_by_sql(sql)

   respond_to do |format|
      format.html
      format.json
      format.js
  end
end

这里是 application.js =>

$(document).ready(function() {

  $('#date_form').submit(function (){  

    $.ajax({
     type: 'POST',
     url: "/events/dateFilter", 
     beforeSend: function (xhr) {xhr.setRequestHeader("Accept", "text/javascript");},
     data: { 'start_date' : $("input[name='event[start_date]']").datepicker(), 'end_date' : $("input[name='event[end_date]']").datepicker()}
     success: function(data) { $('#content').html(response); }
    });

 });

这是来自服务器的日志数据 =>

    Started POST "/events/dateFilter" for 127.0.0.1 at 2012-12-20 12:18:57 -0500
    Processing by EventsController#dateFilter as JS
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"x4cbSoYnUu2+W6qvtPnKXvXR8Tp3Yh7BP9W0RMyR02g=", "event"=>{"start_date"=>"07/01/12", "end_date"=>"07/02/12"}, "commit"=>"Submit"}

     **shows SQL Statement getting all records**

    Rendered events/_dateFilter.html.erb (89.1ms)
    Rendered events/dateFilter.js.erb (90.7ms)
    Completed 200 OK in 212ms (Views: 80.5ms | ActiveRecord: 128.2ms)

最后,我要渲染的页面 _dateFilter.html.erb =>

<div class="content">
<table class="table table-striped table-hover">
  <thead>
    <tr>
      <th><%= sortable  "event_id" %></th>
      <th><%= link_to "Time Created", :sort => "event_date_time_local" %></th>
      <th><%= link_to model_class.human_attribute_name(:event_type_id), :sort => "event_type" %></th>
      <th><%= link_to model_class.human_attribute_name(:severity_id), :sort => "severity_name" %></th>
      <th><%= link_to "Examined", :sort => "event_examined" %></th>
      <th><%= link_to model_class.human_attribute_name(:action_required), :sort => "action_required" %></th>
      <%#<th><%= model_class.human_attribute_name(:comments) </th>%>
      <th><%= link_to model_class.human_attribute_name(:initials), :sort => "initials" %></th>
      <th><%= link_to "Ticket ID", :sort => "taskid" %></th>
    </tr>
  </thead>
</div>

我只是不确定为什么它告诉我它正确呈现了部分,但是我的页面上没有任何反应。我对 JQuery 不是很熟悉,所以我的 application.js 或 datefilter.js.erb 文件中可能有问题。

【问题讨论】:

    标签: ruby-on-rails-3 jquery


    【解决方案1】:

    一些事情:

    • 如果您在form_tag 中使用:remote =&gt; true,则无需调用ajax。 JQuery 将自动处理对 Rails 的调用。你应该可以注释掉application.js中的代码。
    • 确保您的 HTML 中已有一个包含 id="content" 的 div。
    • 目前尚不清楚您的_dateFilter.html.erb 中的大量ruby 变量是从哪里获得的。你能不能从一个简单的部分开始,看看它是否有效,然后你可以从控制器传递的@events变量开始添加细节:

    .

    <div class="content">
     <table>
        <thead>
           <tr>
              <th>Test</th>
           </tr>
        </thead>
     </table>
    </div>
    

    【讨论】:

    • 再次感谢您的帮助!我尝试添加警报,但在我提交表单后它没有弹出。我一定在这里做错了什么。 . ..
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2016-12-30
    • 1970-01-01
    • 2012-12-24
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多