我的项目包括以下文件:
./index.html
./js/main.js
./js/vendor/require.js
./js/viewmodel/vm.js
具有以下index.html
相关片段:
<script data-main="js/main.js" src="js/vendor/require.js"></script>
<script type="text/javascript">
require(['viewmodel/vm', 'ko'],
function(viewmodel, ko) {
ko.applyBindings(viewmodel);
}
);
</script>
该js/main.js
文件如下:
var root = this;
define('jquery', ['http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.js'], function () { return root.$; });
define('ko', ['http://ajax.aspnetcdn.com/ajax/knockout/knockout-2.1.0.js'], function (ko) { return ko; });
该js/viewmodel/vm.js
文件...
define(['jquery', 'ko'],
function($, ko) {
return {
subject: 'world',
greeting: 'hello'
}
}
);
当您打开浏览器访问 index.html 时,浏览器会尝试加载一个名为js/ko.js
而不是使用 .html 中定义的模块的文件main.js
。似乎 data-main 属性指向的 js 文件不能保证在依赖解析之前运行。这对我来说似乎不正确,因为 data-main js 文件的一个目的是定义要求配置(即路径、垫片等)。我正在使用需要 v2.1.2。
如果我将main.js
文件的内容复制到index.html
. “完全没问题”是指它将 ko 解析为一个模块并找到适当的 CDN 链接来解析 ko 而不是尝试下载./js/ko.js
.