Rails 控制器未调用 Javascript 函数

Rails controller not calling Javascript function

我需要我的一个 Rails 控制器在创建后调用 Javascript (Coffeescript) 函数,以便传递创建的新对象的 ID。问题是该函数从未被调用。

这是控制器comments_controller.rb:

class CommentsController < ApplicationController
  def create
    newcomment = Comment.create!(comment: params[:comment], user_id: current_user.id, rutina_id: params[:id])
    respond_to do |format|
      format.js { render :js => "create_comment(" + newcomment.id.to_s + ");" }
    end
  end
  ...

还有我的 CoffeeScript 文件 rutinas.js.coffee:

$ ->
  $('#dias').change ->
    ...

  $('#diasedit').change ->
    ...

  $('[id^="arrowUp"]').click ->
    ...

  $('[id^="arrowDown"]').click ->
    ...

  $('[id^="eliminar_com_"]').click ->
    ...

  $('[id^="editar_com_"]').click ->
    ...

  create_comment = (id) ->
    console.log(id)
    newComment = $('#com_model').clone();
    newComment.removeClass('hidden');
    newComment.find("td#content_com_model").html($('#comment').val());

    today = new Date();
    dd = today.getDate();
    mm = today.getMonth()+1;
    yyyy = today.getFullYear();
    if(dd<10)
      dd = '0'+dd
    if(mm<10)
      mm = '0'+mm
    today = yyyy + '-' + mm + '-' + dd;
    newComment.find("small#date_com_model").html(today);

    newComment.find("small#date_com_model")

    newComment.insertAfter($('#com_model'))


  $('#printBtn').click ->
    ...


  if document.getElementById("rutinas-list") != null
    i = 0
    while i < document.getElementById("rutinas-list").childElementCount
      i += 1
      do(i) ->
        ...

  cambia_voto =(element, cambio) ->
    ...


  $("#rutina_privacy_lvl").change ->
    ...

新评论创建成功,newcomment.id.to_s包含正确的值,我已经检查过了,但从未达到console.log(id)。

更新

remote: true 在表格中设置。事实上,我测试过

respond_to do |format|
    format.js {
        logger.debug "create_comment(" + newcomment.id.to_s + ");"
        render :js => "create_comment(" + newcomment.id.to_s + ");"
    }
end

并且 create_comment(41); 已正确登录到 ruby 的终端

我认为你可能做错了。

你应该做的是使用AJAX创建评论(通过POST请求),然后如果请求成功使用AJAX的回调来执行你的JS函数想要并使用控制器返回的内容(通过控制器响应中的 format.json)。

https://coffeescript-cookbook.github.io/chapters/jquery/ajax

当操作请求 create 是 JS 请求时,控制器将执行以下代码:

format.js { render :js => "create_comment(" + newcomment.id.to_s + ");" }

如果您使用 AJAX 发送此请求,则可能的错误可能是 dataType 参数的错误值。您需要将其设置为 "script" 才能使此 JS 正常工作。

如果您没有手动调用 AJAX(使用 remote: true),请尝试在 .js.erb 模板中编写此 JS 代码。