Rails JS模板不会呈现javascript

时间:2014-02-28 03:13:18

标签: javascript ruby-on-rails ruby-on-rails-3

我有一个Rails应用程序在渲染js模板时表现得很奇怪。

这是我的更新操作(对于“消息”模型)。

@message = Message.find_by_id(params[:id])
if @message.update_attributes(params[:message])
  respond_to do |format|
    format.js
  end
end

然后,在app / views / messages / update.js.erb中,我有了这个。

$(".active-status").html("hello world");

我有JS触发更新(用户勾选复选框),数据正确通过控制器。但是我想在更新模板中运行的JS实际上都没有运行。

我在上面的JS之前和之后放置了print语句,它正确地打印到日志中。服务器日志中没有错误,控制台中没有错误。当我在控制台中运行上面提到的JS行时,它工作正常。那么模板出了什么问题?

1 个答案:

答案 0 :(得分:0)

如果在AJAX更新期间发生错误,浏览器控制台将不会打印错误。您可以通过故意从js.erb文件中调用不存在的函数并使用print语句验证它是否失败来自行测试。这可能会产生误导。因此,当您单击复选框时,您应该100%确定在$(".active-status").html("hello world");后直接看到打印件。

这是打印机在测试时的外观。如果你没有看到两者,那么就会出现JS错误,即使它没有在JS控制台中报告。

trace('BEFORE HELLO WORLD');
$(".active-status").html("hello world");
trace('AFTER HELLO WORLD');

修改

我将添加一个例子来澄清混乱。

<%logger.error "START OF JS.ERB FILE"%>
console.log('HELLO BEFORE ERROR');
alerts('hi'); // NOTE the JS errors at this point because 'alerts' is not defined, but the browser JS log never reports an error
$('#some_div_i_want_to_hide').hide(); // this never happens
console.log('HELLO AFTER ERROR');
<%logger.error "END OF JS.ERB FILE"%>

rails服务器日志将打印出“START OF JS.ERB FILE”行和“END OF JS.ERB FILE”行。我的浏览器JS日志打印出“HELLO BEFORE ERROR”行,但从未打印出“HELLO AFTER ERROR”这一行。所以js.erb文件在错误之后继续执行,但是在错误之后你的js永远不会被调用。