我尝试使用:requirejs,jquery,knockout和mustache来构建彩色国际象棋游戏应用程序。
我在github和脚本上找到了用小胡子扩展淘汰赛的模板系统,但我无法在我的代码中干净地整合它。这个脚本假定在它里面定义了'ko'符号(它是一种插件)但是我得到了一个引用错误:'ko'没有被定义......
我有以下目录布局:
project/
www/
index.html
js/
app.js
app/
colorchess.js
ui.js
libs/
jquery.js
ko-min.js
ko.mustache.js
mustache.js
require.js
以及以下JS文件:
- app.js -
requirejs.config({
baseUrl : "js/app",
paths : {
"app" : "./app",
"jquery" : "../lib/jquery",
"ko" : "../lib/ko-min",
"mustache" : "../lib/mustache",
"ko.mustache" : "../lib/ko.mustache"
},
shim : {
'ko.mustache' : ['ko', 'mustache']
}
});
requirejs(["colorchess"]);
- colorchess.js -
require(['ui'], function() {
... main game logic ...
})
- ui.js -
define(['jquery', 'ko'], function(jquery, ko) {
console.log(ko);
// BUG HERE (in this require)
require(['ko.mustache'], function() {
console.log('ko.mustache');
});
});
所以我的问题肯定是:如何将'ko'符号全局变为'ko.mustache.js'脚本范围并修复ReferenceError错误?
此致
答案 0 :(得分:0)
问题是ko.mustache
期望ko
在全局命名空间中可用。当使用RequireJS时,它们不会暴露给全局,而是作为模块返回并作为参考传递。
将ko.mustache包含到依赖于ko
和mustache
的define中。那你就不需要垫片了。哪个更干净。
在ko.mustache
上调用require之前,将ko和mustache作为全局变量展开:
样品:
define(['jquery', 'ko', 'mustache'], function (jquery, ko, mustache) {
console.log(ko);
window.ko = ko;
window.Mustache = mustache;
require(['ko.mustache'], function () { console.log('ko.mustache'); });
});