2015-06-04 145 views
1

IM的JavaScript的新手,谷歌didnt有助于:requirejs和字节缓冲区

我tryed加载ByteBuffer.js一个require.js模块中:

define(['js/ByteBufferAB'], function (ByteBufferAB) { 

var MessageBase = function() { 
    this._version = 0; // unsinged int 16 bits 
    this._dataType = ""; 

}; 

MessageBase.prototype.toBytes = function() { 
    //console.log(new ByteBufferAB(58)); 
    var headerBytes = new ByteBufferAB(58); // <-- here comes the error 
    headerBytes.clear(); 
    return headerBytes; 
}; 


return MessageBase; 

}); 

具有相同语法math.js被正确地装载。

但随着ByteBufferAB.js以下错误出现:

Uncaught TypeError: undefined is not a function 

我在做什么错? 感谢您的帮助

+0

您是否将ByteBufferAB.js包含在您的项目目录中?尝试打开F12开发工具,打开网络选项卡,并查看它试图从哪里加载它。 – Katana314

+0

是的,ByteBufferAB.js ist在我的项目目录中。 console.log(require.defined(“js/ByteBufferAB”));返回True – vagus1975

+0

您使用的是什么ByteBuffer发行版?如果'require.defined(“js/ByteBufferAB”));返回True'有可能,你的模块只是返回使用。 – Andrey

回答

1

在你define叫你指的是模块js/ByteBufferAB所以RequireJS查找名为js/ByteBufferAB模块。然而,defines itself作为ByteBuffer模块:

/* AMD */ else if (typeof define === 'function' && define["amd"]) 
    define("ByteBuffer", ["Long"], function(Long) { return loadByteBuffer(Long); }); 

因为模块名称是硬编码的,你必须在配置您的paths这样的映射,你给RequireJS:

ByteBuffer: "js/ByteBufferAB" 

和你需要在define调用中将模块称为ByteBuffer

如果这个图书馆的开发者没有硬编码一个名字,但是他们拥有,那么我们就是这样。

+0

谢谢,另外我在路径配置中犯了一个错误...但你的回答对我有帮助! – vagus1975