我偶然发现this post有一个可能的解决方案,但它没有工作,我收到同样的错误ko is not define
。
我把它放在它自己的JS文件中,因为我假设knockout.inject
需要在原始文章中解释的模块中。{/ p>
define('knockout.inject', ['knockout'], function (k) {
window.ko = k;
return k;
});
然后:
require.config({
paths: {
knockout: 'Path to knockout',
// This is the file
knockoutbindings: 'knockout.bindings.orderable'
},
shim: {
"knockoutbindings": {
deps: ["knockout"]
},
map: {
// inject ko back in the global namespace
'*': {
'knockout': 'knockout.inject'
},
// prevent cycles
'knockout.inject': { 'knockout': 'knockout' }
}
}
});
但是,我不确定如何实例化该文件,我收到错误:ko is undefined
。后跟文件和目录的名称。
使用淘汰赛映射,我所要做的就是:
ko.mapping = komapping;
如何实例化此文件?
答案 0 :(得分:0)
如果您使用require,直接或作为依赖项加载ko
,ko
未定义为全局变量,因此,您的非AMD插件无法附加到{{ 1}}。
有两种解决方案:
修改您的插件,使其符合标准。这意味着将ko作为模块的依赖项加载,并在模块中对ko的本地引用中包含插件函数
使用ko
,这不是最佳解决方案,但如果您不想将插件重新定义为符合AMD标准的模块,则更容易。
但是请不要混合使用这两种模式,因为你最终会添加shims
的本地版本,这些版本与全局版本不同。
您可以在此处找到有关如何使用填充程序的详尽说明:How to use requirejs with jQuery。在这里,当您拥有不符合AMD标准的插件时,您将找到使用垫片的详细信息。在这种情况下,问题和解决方案是针对非AMD jQuery插件进行彻底解释的,但是ko插件的工作方式完全相同。