js.erb文件未触发

时间:2019-01-30 08:43:08

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 erb filterrific

我有三个文件: 控制器:

   def index
    @filterrific = initialize_filterrific(
      DimDictionary,
      params[:filterrific],
      select_options: {},
      persistence_id: 'shared_key',
      default_filter_params: {},
      available_filters: [ :dictionary_word_filter ]
    ) || return

    @dictionaries = @filterrific.find.limit(30)

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

Index.html.haml

= form_for_filterrific @filterrific do |f|
  .ui.form
    .fields
      .field
        Filter Word
        = f.text_field :dictionary_word_filter
  = render_filterrific_spinner
= render(partial: '/test/list', locals: { dictionaries: @dictionaries })

Index.js.erb

<% alert("hi"); %>
<% console.log('working Mannnnn') %>
<%  js = escape_javascript(render(partial: '/test/list', locals: { dictionaries: @dictionaries })) %>
$("#filterrific_results").html("<%= js %>");

Index.js.erb没有被触发。每次页面加载时,其都应运行Index.js.erb并显示警报和console.log并显示html吗?还是js.erb仅在ajax请求上触发?

我在这里使用filterrific gem进行过滤,但是index.js.erb文件从未被触发。

即使我已经在我的控制器中包含js格式。应该怎么办?我在做错什么吗?

1 个答案:

答案 0 :(得分:2)

  

每次加载页面时,其应运行Index.js.erb并显示   警报和console.log并显示html正确吗?

否,format.js意味着,当客户想要JS时,您的控制器会返回JS作为响应。

例如,如果要使用JS进行响应,则应使用remote:true。不可能同时渲染两者,因为控制器动作一次只能响应一个HTTP请求。

有关Rails响应的更多信息: https://api.rubyonrails.org/classes/ActionController/MimeResponds.html

关于Rails中的javascript: https://guides.rubyonrails.org/working_with_javascript_in_rails.html