我正在尝试将JS函数绑定到文本字段(“text”类型的输入)。使用JQuery 2.0.2& Rails 3.1我在位于.js.coffee
的{{1}}文件中执行此操作:
assets/javascripts
然后在我运行的window.test_questions = {}
window.test_questions.bind_input = ->
$('#question_content').on 'input', ->
// do something
文件夹中的.js.erb
中:
views\TheRightController
在呈现部分之前,页面上不存在 $('#new_question').html('<%= escape_javascript(render("new_question_form")) %>');
test_questions.bind_input();
。我担心#question_content
将在渲染完成之前运行,而不是找到bind_input()
并且不对它进行任何绑定。
我不是100%这是一个问题(我的代码目前正在工作),但我担心如果我在其他地方使用“更重”的渲染它会破坏。
我是徒劳地担心吗? 有没有办法确保渲染完成没有错误,然后才执行下一行。
答案 0 :(得分:0)
这里有两个步骤。
首先执行Ruby脚本并将其转换为普通的html / javascript文件。这是在将页面提供给客户端之前由服务器完成的。在此步骤中,您的所有<%= %>
都将被执行。因此,无需担心在Rails render
之前执行JavaScript。
然后客户端接收页面并开始呈现它并执行javascript。如果您在$('#new_question').html
之前致电bind_input
,再次无需担心,它会同步执行,您的选择器#question_content
也会有效。但是,如果在DOM完全加载之前运行$('#new_question')
,则另一个选择器可能会中断。为了防止这种情况,请使用JQuery的$(document).ready()
。