运行以下内容:
setTimeout(this.nextScene.load(function() {
this.nextSceneLoaded = true;
}.bind(this)), 0);
应该异步加载下一个场景并让我们知道它何时完成,但我注意到Firefox控制台中的元素列表之后出现“SyntaxError:missing”。
在StackOverflow上进行一些搜索有类似的问题,但它们似乎涉及到人们不使用函数作为setTimeout的第一个参数。
为什么会发生这种情况,我该怎么做才能解决它/有什么替代方案吗?
(也没有jQuery,等等。我想尽可能保持这个简单的JavaScript。)
答案 0 :(得分:1)
执行setTimeout并将其作为第二个值传递给0的唯一原因是克服了几个不起眼的浏览器竞争条件。
你在这里的代码用回调调用this.nextScene并将该调用的结果传递给setTimeout,它不会延迟执行,因为你没有通过引用传递函数bind不在这里做任何事情除非this.nextScene传回一个函数。
我最好猜测你要做的是这个。
HListView sb_list = (HListView) view.findViewById(R.id.submenu_button);
sb_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
view.setSelected(true);
答案 1 :(得分:0)
好的,感谢David Bradshaw让我意识到我没有将一个函数传递给setTimeout(早上5点编码是一个坏主意)。我真正想做的是:
setTimeout(function() {
this.nextScene.load(function() {
this.nextSceneLoaded = true;
}.bind(this));
}.bind(this), 0);
然而,正如其他用户指出的那样,它确实没有帮助,仍然阻止了用户界面。希望如果有人在将来寻找类似的东西,这将是有用的。