2017-12-14 11 views
0

만든 새 오브젝트의 ID를 전달하기 위해 만든 후에 자바 스크립트 (Coffeescript) 함수를 호출하려면 레일즈 컨트롤러 중 하나가 필요하다. 문제는 함수가 호출되지 않는다는 것입니다.레일즈 컨트롤러가 자바 스크립트 함수를 호출하지 않는다

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.coffee : 여기

는 컨트롤러 comments_controller.rb의

$ -> 
    $('#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이 성공적으로 작성하고 newcomment.id.to_s 오른쪽 값을 포함한다 , 나는 그것을 확인했지만 console.log (id)에 도달하지 못했습니다.

UPDATE

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);

+0

'newcomment'를 얻을 수있는'create.js.erb' 파일이 있어야한다고 생각합니다. – Gabbar

+0

브라우저의 네트워크 속성을 살펴보십시오. 여전히 이상한 경우 여기에 붙여 넣으십시오. – DonPaulie

+0

전체 js.coffee 파일을 붙여 넣으십시오. –

답변

0

https://coffeescript-cookbook.github.io/chapters/jquery/ajax를 참조하십시오 잘못된 값 dataType 매개 변수 이 JS를 작동 시키려면 "스크립트"로 설정해야합니다.

그리고 AJAX를 수동으로 (remote: true을 사용하여) 호출하지 않는 경우이 JS 코드를 .js.erb 템플릿으로 작성해보십시오.

+0

'remote : true'를 사용하지 않는 사람을위한 것임 –

+0

의견을 작성한 후 브라우저 콘솔에 오류가 있습니까? –

+0

함수'create_comment'가 정의되어 있습니까? 브라우저 콘솔에서 호출 할 수 있습니까? –

0

나는 당신이 아마 길을 잘못하고 있다는 생각을 테스트했습니다.

AJAX를 사용하여 POST 요청을 통해 주석을 작성한 다음 AJAX의 콜백을 사용하여 원하는 JS 함수를 실행하고 컨트롤러가 반환 한 내용을 사용합니다 (컨트롤러 응답에 format.json 통해).). 이 요청을 보낼 AJAX를 사용하는 경우

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

는 다음 가능한 실수가 될 수있다 :

행동 create에 대한 요청은 JS 요청 때 실행됩니다 컨트롤러의 코드에 따라