Rails - 如何确保部分已在js.erb中呈现

时间:2013-12-25 11:50:05

标签: javascript jquery ruby-on-rails ajax render

我正在尝试将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%这是一个问题(我的代码目前正在工作),但我担心如果我在其他地方使用“更重”的渲染它会破坏。

我是徒劳地担心吗? 有没有办法确保渲染完成没有错误,然后才执行下一行。

1 个答案:

答案 0 :(得分:0)

这里有两个步骤。

首先执行Ruby脚本并将其转换为普通的html / javascript文件。这是在将页面提供给客户端之前由服务器完成的。在此步骤中,您的所有<%= %>都将被执行。因此,无需担心在Rails render之前执行JavaScript。

然后客户端接收页面并开始呈现它并执行javascript。如果您在$('#new_question').html之前致电bind_input,再次无需担心,它会同步执行,您的选择器#question_content也会有效。但是,如果在DOM完全加载之前运行$('#new_question'),则另一个选择器可能会中断。为了防止这种情况,请使用JQuery的$(document).ready()