Ric*_*ard 2 javascript requirejs
我刚刚开始使用 RequireJs。只有一个问题。有人可以解释为什么 require 块内的代码不在页面刷新时运行。它仅在我清除缓存时运行。
例子:
require(['game','comm','misc','soundutil','sprite','gui','constants'],function(Game,COMM,MISC,SoundUtil,Sprite, Gui,CNT){
window.onload = function () {
var canvas = document.getElementById('gameCanvas'),
game = document.getElementById('game'),
g = null,su = null;
canvas.width = document.body.clientWidth;
canvas.height = document.body.clientHeight;
console.log('Gamestate at beginning',CNT.GameState._current);
Run Code Online (Sandbox Code Playgroud)
谢谢
您的问题中的代码看起来并不完整,但我将假设以下内容。您所描述的看起来像是竞争条件:
当缓存不包含您的数据时,分配发生在事件触发window.onload之前,因此您的处理程序被调用。onload
当缓存已包含您的数据时,该事件会在分配发生之前onload触发,因此您的处理程序永远不会被调用。window.onload
我建议使用该domReady插件,因为它旨在处理这两种情况。我自己从未使用过它,但从我从文档中收集到的信息来看,例如:
require(['domReady!', 'game','comm','misc','soundutil','sprite','gui','constants'],...
Run Code Online (Sandbox Code Playgroud)
应该管用。顺便说一句,感叹号不是拼写错误。然后,您需要使您的onload处理程序成为您传递给的函数的主体require。
请注意,document.onload遇到同样的问题。它更容易出现您遇到的问题,因为它经常先于问题window.onload发生。
ETA:正如 Shrike 所说,您还可以使用 jQuery 的等待方法:$(document).ready(...)。我的经验法则是,如果我已经在使用 jQuery(我实际上在当前的所有项目中都这样做),那么我会使用$(document).ready(...),否则我会使用domReady. 本问题已详细研究了两种方法之间的差异。