在我的rails项目中,我编写了一个javascript函数来覆盖另一个文件中定义的另一个对象的默认行为。执行此操作的行看起来像:
window.someObject.methodToOverride = function...
最初这会给我一个cannot set property 'methodToOverride' of undefined
错误,我假设这与时间问题有关(someObject
尚未设置)。我能够通过在jQuery $(document).ready
函数中删除它来解决这个问题,但是当它起作用时,对我来说似乎有些笨拙。
有更好的方法吗?
答案 0 :(得分:1)
这听起来像是在寻找require.js。它的作用是让你模块化地设置你的代码,定义哪个模块取决于哪个。在你的情况下,一旦设置,通过放置一个包装,如
require(["someObject"], function (someObject) {
someObject.methodToOverride = function...
}
当你使用这个函数时,require.js将动态加载你的someObject文件,当它被完全加载时,将someObject作为参数传递给你提供的函数。它可以处理更复杂的示例,包含任何级别和任意数量的依赖项,根据需要加载它们不超过一次。
您可以在SO上找到有关require.js的更多信息,例如: