requireJS 无法加载 Handsontable
requireJS fails to load Handsontable
我一直在努力学习使用 requireJS。
就其本身而言,handontable 非常棒。
我收到以下错误:
app.js:37 Uncaught TypeError: Handsontable is not a constructor
at app.js:11
at Object.execCb (require.js:1693)
at Module.check (require.js:881)
at Module.<anonymous> (require.js:1136)
at require.js:134
at require.js:1186
at each (require.js:59)
at Module.emit (require.js:1185)
at Module.check (require.js:936)
at Module.enable (require.js:1173)
这是一个最简单的例子。
我的 html 代码:
<html lang="en"><head>
<script data-main="static/js/app" src="static/js/require.js">
</script>
<link rel="stylesheet" media="screen" href="static/css/handsontable.css">
</head>
<body>
<div id="example"></div>
</body>
</html>
我的 app.js 代码(编辑:根据 Nhor 的回答):
requirejs.config({
baseUrl: 'static',
waitSeconds: 10,
paths: {
// Handsontable full's requirements is in the plugin directory/
// I shouldn't need them, but incase.
'pikaday': 'plugins/pikaday/pikaday',
'zeroclipboard': 'plugins/zeroclipboard/ZeroClipboard',
'moment': 'plugins/moment.min',
// Handsontable is directly in the static folder
'handsontable': 'handsontable'
}
});
requirejs([
'handsontable'
], function(
Handsontable
) {
var data = [['', 'Kia', 'Nissan', 'Toyota', 'Honda'],
['2008', 10, 11, 12, 13],
['2009', 20, 11, 14, 13],
['2009', 30, 15, 12, 13]
];
var hot = new Handsontable(document.getElementById('example'), {
data: data,
colHeaders: true,
rowHeaders: true,
minSpareRows: 1,
minSpareCols: 1,
});
});
根据 hansontable 的文档,handsontable 支持 AMD https://github.com/handsontable/handsontable。在我看来,我对 requireJS 有一些不了解的地方。我导入的其他模块没有遇到这个问题。
任何帮助将不胜感激。
您缺少 handsontable
库路径。 RequireJS
需要知道您要使用的所有文件的路径,这意味着您必须在 requirejs.config
函数中指定路径。这些路径可以指向您的本地文件系统或通过 HTTP 指向远程资源。您可以在这里阅读更多相关信息:http://requirejs.org/docs/api.html#jsfiles
@edit
实际上我犯了一个小错误,说路径可以指向文件系统。那是因为我习惯在HTTP路由中反映我的文件系统目录结构,但实际上路径应该指向文件驻留在你的HTTP服务器上的地方,所以例如如果地址是http://127.0.0.1:8000/static/js/handsontable.js
, baseUrl
应该是 ./static/js
.
您使用的是哪个版本?今天遇到了完全相同的问题,恢复到版本 0.31.2 修复了它。使用低于 0.32.0 的任何东西都可以正常工作。我知道这可能不是完美的 SO solution/response,但它确实有效。
我一直在努力学习使用 requireJS。
就其本身而言,handontable 非常棒。
我收到以下错误:
app.js:37 Uncaught TypeError: Handsontable is not a constructor
at app.js:11
at Object.execCb (require.js:1693)
at Module.check (require.js:881)
at Module.<anonymous> (require.js:1136)
at require.js:134
at require.js:1186
at each (require.js:59)
at Module.emit (require.js:1185)
at Module.check (require.js:936)
at Module.enable (require.js:1173)
这是一个最简单的例子。 我的 html 代码:
<html lang="en"><head>
<script data-main="static/js/app" src="static/js/require.js">
</script>
<link rel="stylesheet" media="screen" href="static/css/handsontable.css">
</head>
<body>
<div id="example"></div>
</body>
</html>
我的 app.js 代码(编辑:根据 Nhor 的回答):
requirejs.config({
baseUrl: 'static',
waitSeconds: 10,
paths: {
// Handsontable full's requirements is in the plugin directory/
// I shouldn't need them, but incase.
'pikaday': 'plugins/pikaday/pikaday',
'zeroclipboard': 'plugins/zeroclipboard/ZeroClipboard',
'moment': 'plugins/moment.min',
// Handsontable is directly in the static folder
'handsontable': 'handsontable'
}
});
requirejs([
'handsontable'
], function(
Handsontable
) {
var data = [['', 'Kia', 'Nissan', 'Toyota', 'Honda'],
['2008', 10, 11, 12, 13],
['2009', 20, 11, 14, 13],
['2009', 30, 15, 12, 13]
];
var hot = new Handsontable(document.getElementById('example'), {
data: data,
colHeaders: true,
rowHeaders: true,
minSpareRows: 1,
minSpareCols: 1,
});
});
根据 hansontable 的文档,handsontable 支持 AMD https://github.com/handsontable/handsontable。在我看来,我对 requireJS 有一些不了解的地方。我导入的其他模块没有遇到这个问题。
任何帮助将不胜感激。
您缺少 handsontable
库路径。 RequireJS
需要知道您要使用的所有文件的路径,这意味着您必须在 requirejs.config
函数中指定路径。这些路径可以指向您的本地文件系统或通过 HTTP 指向远程资源。您可以在这里阅读更多相关信息:http://requirejs.org/docs/api.html#jsfiles
@edit
实际上我犯了一个小错误,说路径可以指向文件系统。那是因为我习惯在HTTP路由中反映我的文件系统目录结构,但实际上路径应该指向文件驻留在你的HTTP服务器上的地方,所以例如如果地址是http://127.0.0.1:8000/static/js/handsontable.js
, baseUrl
应该是 ./static/js
.
您使用的是哪个版本?今天遇到了完全相同的问题,恢复到版本 0.31.2 修复了它。使用低于 0.32.0 的任何东西都可以正常工作。我知道这可能不是完美的 SO solution/response,但它确实有效。