在rails中我有两个js文件,一个名为welcome.js,另一个名为about.js。我有相同的代码。我正在使用require_tree。在application.js
中welcome.js:
var loadw = function() {
console.log("Hello from welcome js!");
}
$(document).ready(loadw); // for regular page load
$(document).on('page:load', loadw); // for turbolink
about.js:
var loada = function() {
console.log("Hello from about js!");
}
$(document).ready(loada); // for regular page load
$(document).on('page:load', loada); // for turbolink
我现在有两个页面,我的主页和一个计算页面,其中有一个用Javascript编写的计算器(该js文件还有$(document).ready函数,如about.js和welcome.js,如果这很重要的话。当我加载各个页面时,浏览器控制台中的JS输出是:
加载主页:
"Hello from about js!"
加载计算器页面:
"Hello from about js!"
"Hello from welcome js!"
我的问题是,当我加载主页时,为什么来自welcome.js的代码没有运行?我最初尝试做的是添加代码以在点击它们时突出显示某些按钮,并且我将此代码添加到welcome.js但它不起作用,除非我加载计算器页面,但是如果我放在about.js中(按钮在标题中)。经过几个小时的尝试调试后,我在这里 - 除了console.log之外我删除了所有东西,但它仍在发生。我是铁杆新手,我可能错过了一些非常简单的东西。我正在讨论是否要删除require_tree并仅在需要的地方加载js文件,看看是否能解决问题,但我不应该这样做,对吧? / p>
答案 0 :(得分:0)
根本不确定,但有时javascript会在分号丢失时感到困惑。由于只执行了第一个(按字母顺序排列)函数,因此它看起来与连接文件的语法有关。
尝试在函数定义后添加分号,例如
var loadw = function() {
console.log("Hello from welcome js!");
};
再次运行。
答案 1 :(得分:0)
想出来......当我加载除calc页面以外的页面时,我的calc.js中发生了一些错误(因为这些页面中缺少元素)。由于这个错误,calc.js(welcome.js)之后的所有js文件都没有正确加载,但是about.js是因为它来自calc.js。
我将此添加到我的application.js
//= stub calculator.js
然后在我的calc页面中使用javascript_include_tag单独添加它。
然后我收到一个错误,说资产不会被提供,除非我把它放在config / initializers / assets.rb的预编译列表中,所以我这样做了,现在它可以了。