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 代码。
我需要我的一个 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 代码。