我的JS / HTML应用程序正在加载一些我已设置为包含对象文字的控制器:
例如:page1Controller.js
@Override public boolean onTouch(final View v, MotionEvent event) {
//Some code
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
deltaY = event.getRawY() - downY;
if(//Some condition) {
listView.scrollTo(0, (int) -deltaY);
isScrolling = true;
}
break;
}
例如:navigation.js
var page1 = {
initialize() {
$(".page").removeClass('on');
$("#page1").addClass('on');
},
doThis: function() {
// script here
},
doThat: function() {
// Script here
}
}
注意:navigation.js.bindEvents()在pageLoad / deviceLoad事件之后运行(它是一个phonegap应用程序)。
并且脚本包含在我的HTML页面底部:
var navigation = {
bindEvents: function() {
var page1Button = document.getElementById('page1Button');
page1Button.addEventListener('click', this.loadPage1, false);
},
loadPage1: function() {
page1.initialize();
},
loadPage2: function() {
page2.initialize();
}
}
据我了解,默认情况下,脚本将按照它们在HTML页面中出现的顺序依次加载 - 一个接一个地加载。
然而,当我从navigation.js调用say page3.doThat()时,doThat函数是未定义的,尽管某些其他控制器中的函数工作正常。是不是这样,即使脚本按顺序加载,在page3Controller.js完全“注册”它的功能之前可能会加载navigation.js?
答案 0 :(得分:1)
答案是,在脚本按顺序加载到一组HTML脚本标记中的情况下,每个脚本都会在下面的脚本之前完整地加载到内存中,从而使以前脚本中的函数可以被稍后调用的函数访问。感谢@ T.J。克劳德在评论中指出了这一点。