0

我尝试使用:requirejs、jquery、knout 和 mustache 来构建一个彩色国际象棋游戏应用程序。

我在 github 和 script 上找到了用小胡子扩展淘汰赛的模板系统,但我无法将它干净地集成到我的代码中。该脚本假定“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 错误?

问候

4

1 回答 1

0

问题是ko.mustache期望ko在全局命名空间中可用。并且在使用 RequireJS 时,它们不会暴露给全局,而是作为模块返回并作为引用传递。

  1. 将 ko.mustache 包装到 define 中,并依赖于komustache。然后你就不需要垫片了。哪个更干净。

  2. 在调用 require on 之前将 ko 和 mustache 公开为全局变量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'); });
});
于 2013-05-12T22:06:24.310 回答