嗯,这就像我在两天内关于require.js的第三个问题,问题是我有一个包含以下模块的项目:
在主文件中,所有模块加载后必须调用的回调有时会被触发,有时不会。
我不会发布任何代码,因为我不相信它有什么问题,但我必须提到它不能成为加载顺序的问题,因为我的文件没有任何代码相互依赖。这是真的很奇怪,我的文件不是太大(首先有73行,第二行有18行)
所以问题是,可能出现什么问题?一个require.js错误或其他什么?
编辑:这是我模块的代码:
main.js:
require
(
['cliente/juego', 'cliente/res'],
function (juego, res)
{
function main ()
{
alert('ok');
}
window.addEventListener('load', main, false);
}
);
res.js:
define
(
function ()
{
return (function ()
{
var recursos =
{
soldado : { ruta : 'res/imagenes/soldados/1.png', tipo : 'Image', fuente : null }
};
var metodos = {};
var cargados = 0;
var totales = 0;
var listos = false; // Todavía no se han cargado los recursos
function terminarCarga (evento)
{
// Cada vez que se cargue un recurso se incrementará el progreso
cargados++;
if (cargados == totales)
{
listos = true; // Recursos cargados y listos para usarse
// Acción a seguir una vez cargados todos los recursos
}
}
metodos.getTotales = function ()
{
return totales;
}
metodos.getListos = function ()
{
return listos;
}
metodos.cargar = function ()
{
// Carga todos los recursos
var recurso;
for (var i in recursos)
{
totales++;
recurso = recursos[ i ];
if (recurso.tipo == 'Image')
{
recurso.fuente = new Image;
recurso.fuente.onload = terminarCarga;
recurso.fuente.src = recurso.ruta;
}
else
{
recurso.fuente = new Audio;
recurso.fuente.addEventListener('loadeddata', terminarCarga, false);
recurso.fuente.src = recurso.ruta;
}
}
}
metodos.get = function (nombre)
{
return recursos[ nombre ].fuente;
}
return metodos;
})();
}
);
juego.js:
define
(
function ()
{
return (function ()
{
var metodos = {};
metodos.getContexto = function ()
{
// Recordar llamar ésta función una vez cargada la página
this.canvas = document.querySelector('canvas');
this.contexto = this.canvas.getContext('2d');
}
return metodos;
})();
}
);
主要功能中的警报仅在所有情况的10%中弹出。
答案 0 :(得分:6)
问题不在于RequireJS或您如何使用RequireJS。问题是有时{/ 1}}事件在执行 load
之前发生。我敢打赌,如果你将window.addEventListener('load', main, false);
的正文更改为以下内容,它将始终有效:
main.js
您可能想要使用domReady
plugin来处理这样的问题。类似的东西:
require(['cliente/juego', 'cliente/res'], function (juego, res) {
console.log('ok');
});
答案 1 :(得分:0)
我之前看到过随机加载错误,不知道这是否是您所看到的原因。如果是这样,看看这个;有时Web服务器本身就是罪魁祸首。无论如何,这是我的情况。
https://groups.google.com/forum/#!msg/requirejs/x5Z-eZMzKwI/rbOSMNULftgJ
编辑:
每次都会调用回调。我在main中更改了代码,所以它看起来像这样:
require(
['cliente/juego', 'cliente/res'],
function (juego, res) {
console.log(juego, res);
function main () {
alert('ok');
}
window.addEventListener('load', main, false);
}
);
我在控制台中收到了这个输出:
Object {getContexto: function}
Object {getTotales: function, getListos: function, cargar: function, get: function}
编辑:
我认为这正是您所寻找的:http://requirejs.org/docs/api.html#pageload