Javascript 使Require.JS与Knockout配合使用

Javascript 使Require.JS与Knockout配合使用,javascript,knockout.js,requirejs,amd,Javascript,Knockout.js,Requirejs,Amd,我在AMD环境中工作,并使用Require.js实现这一点。它还使用KnockOut作为框架。这里的问题是,我刚刚下载了一个敲除插件,它高度依赖于敲除 现在,由于一些问题,我的应用程序的性质我并不完全知道,我的插件不能正常工作,并抛出错误,即在加载我的插件时没有定义Ko 那些曾经遇到过类似问题的人有什么建议吗?如果您引用的插件是映射插件,那么您需要执行以下操作之一 将淘汰脚本文件命名为“knockout.js” 手动更改映射脚本中的define方法,使其与您的名称匹配,即define([“kno

我在AMD环境中工作,并使用Require.js实现这一点。它还使用KnockOut作为框架。这里的问题是,我刚刚下载了一个敲除插件,它高度依赖于敲除

现在,由于一些问题,我的应用程序的性质我并不完全知道,我的插件不能正常工作,并抛出错误,即在加载我的插件时没有定义Ko


那些曾经遇到过类似问题的人有什么建议吗?

如果您引用的插件是映射插件,那么您需要执行以下操作之一

  • 将淘汰脚本文件命名为“knockout.js”

  • 手动更改映射脚本中的define方法,使其与您的名称匹配,即define([“knockout-2.1.0,“exports”],factory);这是调试映射脚本中的第12行


  • 如果是另一个插件,请说明是哪一个插件,以便我能提供更多帮助。

    太棒了,Reid,我昨晚在这里迷路了大约3个小时,所以交易如下: 发生的情况是,映射插件(例如)定义了一个硬编码的依赖项来敲除,对于node、commonjs或amd,对于requirejs,您需要指定敲除插件“路由”或“路径”,例如,我的敲除文件重命名为ko.js,映射到ko.mapping.js,它们位于我在路径配置中重命名为“lib”的文件夹插件中

    在这种情况下,映射插件中必须重命名的行是相同的,但与版本号不同,您只需要输入ko文件的位置

    if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
        // CommonJS or Node: hard-coded dependency on "knockout"
        factory(require("knockout"), exports);
    } else if (typeof define === "function" && define["amd"]) {
        // AMD anonymous module with hard-coded dependency on "knockout"
        define(["lib/ko", "exports"], factory);
    } else {
        // <script> tag: use the global `ko` object, attaching a `mapping` property
        factory(ko, ko.mapping = {});
    }
    
    这条硬编码的线路是导致插件加载失败的原因


    注意:我写这篇文章是作为回答而不是注释,因为注释中的代码看起来非常糟糕

    嗨,里德,我正在使用Ko网格插件。现在,我使用的是Ko-grid.js。我是否需要像处理其他文件一样在上面添加一些define?您可以在这里找到文件:ko映射上有以下代码:
    (函数(工厂){//Module systems magic dance.if(typeof require==“函数”&&typeof exports==“对象”&&typeof Module==“对象”){//CommonJS或节点:硬编码依赖于“敲除”工厂(require(“敲除”),导出);}否则如果(typeof define==“function”&&define[“amd”]){//amd匿名模块,对“knockout”define([“knockout”,“exports”],factory)具有硬编码依赖关系;}否则{//tag使用全局
    ko`对象,附加一个
    映射
    属性工厂(ko,ko.mapping={};}}`我通过将整个Ko-grid.js包装在require(['knockout-2.1.0','jquery'],函数(Ko,$){//code here})中来实现它;下面是示例文件hi Reid,我将代码包装在require中,并确认它正在工作。这是很大的帮助:)。谢谢。
    if (typeof require === "function" && typeof exports === "object" && typeof module === "object") {
        // CommonJS or Node: hard-coded dependency on "knockout"
        factory(require("knockout"), exports);
    } else if (typeof define === "function" && define["amd"]) {
        // AMD anonymous module with hard-coded dependency on "knockout"
        define(["lib/ko", "exports"], factory);
    } else {
        // <script> tag: use the global `ko` object, attaching a `mapping` property
        factory(ko, ko.mapping = {});
    }
    
    define( [ 'js/knockout/knockout-debbug-last-2.2.0' ] , factory );