我在 AMD 环境中工作,并为此使用 Require.js。它还使用 KnockOut 作为框架。这里的问题是我刚刚下载了一个高度依赖knockOut的knockout插件。
现在,由于我的应用程序的 AMD 特性我并不完全了解的一些问题,我的插件无法正常工作,并在加载我的插件时抛出 Ko 未定义的错误。
那些曾经遇到过类似问题的人有什么建议吗?
我在 AMD 环境中工作,并为此使用 Require.js。它还使用 KnockOut 作为框架。这里的问题是我刚刚下载了一个高度依赖knockOut的knockout插件。
现在,由于我的应用程序的 AMD 特性我并不完全了解的一些问题,我的插件无法正常工作,并在加载我的插件时抛出 Ko 未定义的错误。
那些曾经遇到过类似问题的人有什么建议吗?
如果您引用的插件是 Mapping 插件,您将需要执行以下操作之一
将您的淘汰脚本文件命名为“knockout.js”
手动更改映射脚本中的定义方法,使其与您的名称匹配,即 define([" knockout-2.1.0 ", "exports"], factory); 这是调试映射脚本中的第 12 行。
如果是其他插件,请说明是哪个,以便我可以提供更多帮助。
真棒里德,我昨晚迷失了大约 3 个小时,所以这是交易:发生的事情是映射插件(例如)定义了一个硬编码的依赖项来淘汰,对于 node、commonjs 或 amd,对于你需要的 requirejs指定您的淘汰赛插件“路由”或“路径”,例如我的淘汰赛文件重命名为 ko.js 并映射到 ko.mapping.js 并且它们位于我在路径配置中重命名为“lib”的文件夹插件中
require.config({
baseUrl: "js/",
paths: {
"lib" : "plugins"
}
});
在这种情况下,必须在映射插件中重命名的行是相同的,但与版本号不同,您只需输入 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 文件位于 lib 下并重命名为 ko,因此如果您的文件位于“js/knockout/”文件夹下并重命名为 knockout-debbug-last-2.2.0.js,则需要更改同一行到
define( [ 'js/knockout/knockout-debbug-last-2.2.0' ] , factory );
那条硬编码的行是插件加载失败的原因。
注意:我将其写为答案而不是评论,因为评论中的代码看起来非常糟糕。