需要knockout和mustache -如何在脚本范围内注入符号



我试图建立一个彩色象棋游戏应用程序使用:requires, jquery, knockout和mustache模板。

我发现在github和脚本扩展knockout的模板系统与小胡子,但我不能在我的代码干净地集成它。这个脚本假设'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错误?

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

  1. 包装ko。以komustache为依赖定义。那你就不需要他了。

  2. 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'); });
});

相关内容

最新更新