Momentan arbeite ich an der Portierung einer vorhandenen Webanwendung auf require.js
. Die meisten Dinge scheinen zu funktionieren, aber die Funktionalität, die Web-Arbeiter verwendet. Zum Beispiel hatte ich einen Arbeiter, in einer separaten js-Datei definiert MeshLoader.js
, die ein 3D-Modell aus einer STL-Datei lädt:Wie kann require.js mit Web-Arbeitern verwendet werden?
importScripts('../lib/three.min.js', '../lib/STLLoader.js');
onmessage = function(e) {
var blob = e.data;
var reader = new FileReaderSync();
readContents(reader.readAsArrayBuffer(blob));
};
function readContents(contents) {
try {
var geometry = new THREE.STLLoader().parse(contents);
} catch (e) {
// error handling
}
var attributes = {};
// parsing the file is going on here
// ...
postMessage({
status: 'completed',
attributes: attributes,
});
}
Eine kleine Bemerkung: STLLoader.js
Modul ist ein three.js
Plugin, die STLLoader
Objekt definiert und fügt sie zu THREE
Namensraum. Dies ist, wie ich schrieb es mit require.js
:
importScripts('../lib/require.min.js');
require({
baseUrl: '../lib'
}, [
'require', 'three.min', 'stlloader'
],
function(require, THREE, STLLoader) {
onmessage = function(e) {
var blob = e.data;
var reader = new FileReaderSync();
readContents(reader.readAsArrayBuffer(blob));
};
function readContents(contents) {
try {
var geometry = new THREE.STLLoader().parse(contents);
} catch (e) {
// error handling
}
var attributes = {};
// same code as in the initial version
// ...
postMessage({
status: 'completed',
attributes: attributes,
});
}
return onmessage;
});
Der Arbeiter die folgende Art und Weise genannt wird:
var worker = new Worker('js/workers/MeshLoader.js');
worker.postMessage(blob);
worker.onmessage = function (event) {
if (event.data.status == 'completed') {
// ...
} else if (event.data.status == 'failed') {
// ...
} else if (event.data.status == 'working') {
// ...
}
};
Also, das Problem ist, es der Arbeiter scheint überhaupt nicht genannt wird. Vielleicht muss ich es als Modul im requirejs.config()
Abschnitt erklären und dann das Modul als eine Abhängigkeit zu anderen Modulen hinzufügen, die diesen Arbeiter aufrufen?
Es ist unklar, was Ihr Problem ist, redundante Debug-Informationen fehlen. Ich gab Ihnen allgemeine Antwort in meiner Antwort, die das Problem zuverlässig löst (funktioniert hier zum Beispiel: http://darker.github.io/asteroids/demo-simple-bounce/ –