代码之家  ›  专栏  ›  技术社区  ›  Josemafuen

Rails控制器未调用Javascript函数

  •  0
  • Josemafuen  · 技术社区  · 6 年前

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

    这是controller comments\u 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
      ...
    

    还有我的咖啡脚本文件rutinas。js。咖啡:

    $ ->
      $('#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 ->
        ...
    

    新成员成功创建,新成员。id.to\u s包含正确的值,我已经检查过了,但是是控制台。从未访问日志(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的终端

    2 回复  |  直到 6 年前
        1
  •  0
  •   Jagdeep Singh    6 年前

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

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

    如果您使用AJAX发送此请求,那么可能的错误是 dataType 参数您需要将其设置为“script”才能使这个JS工作。

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

        2
  •  0
  •   Samy Kacimi    6 年前

    我想你可能做得不对。

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

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