2015-06-04 148 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