【发布时间】:2016-06-18 19:23:01
【问题描述】:
the KnockoutJS library 是否依赖于全局 ko 对象以外的任何全局状态?或者是否有时间从 javascript 环境的全局状态中添加/减去其他项目(即浏览器中的 window. 对象)
我问是因为我正在创建一个将部署到网站/CMS 环境中的软件。我希望该软件是独立的,而不是依赖外部 CDN 资源。我想在这个软件中使用 KnockoutJS,并确保我对 KnockoutJS 的使用不会与网站/CMS 环境正在使用的任何 KnockoutJS 实例冲突。我不想有条件地加载外部 KnockoutJS 资源,因为我想确保正在运行的 Knockout my 软件的版本是我认为的。
我对 jQuery 有类似的要求——我知道我通过修改 jQuery 库来导出不同的全局变量来实现这一点——即var myJquery=...。我想对 Knockout 的 ko 变量做同样的事情——但如果 KnockoutJS 依赖于全局状态,这将无法正常工作。
【问题讨论】:
-
避免 jQuery 冲突的正确方法是使用为此目的提供的
.noConflict()API。 -
@Pointy 感谢您的参与,但我不确定您是否理解我要解决的问题。网站 A 使用 jQuery 1.8。我的软件,一个非生产开发工具,需要使用jQuery 1.9。我可以使用上述技术包含一个稍微分叉的 jQuery。这确保网站仍然运行在它自己的 jQuery 1.8 上,并且我可以运行我的代码在 jQuery 1.9 上。这肯定不是标准用例,但它是商业扩展业务中常见的一种技术。
-
.noConflict()API 实际上旨在完全适应您所描述的内容。当 jQuery 初始化时,它会保存它为$和jQuery找到的任何值。调用jQuery.noConflict(true)会将这些全局符号返回到它们的原始值。你可以保留对 你的 jQuery 的引用,但是你喜欢。 -
@Pointy 不是,但我明白你为什么会这么说。 jQuery 文档可能会提到运行两个 jQuery,但它也包含“不推荐”的警告,并假设您可以完全控制哪个是第二个 jQuery。在上面的场景中尝试使用 noConflict 的问题是我无法控制何时引入 jQuery。是在网站的 jQuery 之前还是之后?分叉技术更安全、更可靠,并且为这个特定实例产生的支持请求要少得多。关于
jQuery.noConflict(true)的有用信息——谢谢! -
如果你的jQuery是第一个,那么你调用
.noConflict(true),它没有效果。然后,您的代码使用 your 对 jQuery 的引用。如果外星 jQuery 是第一个,那么对.noConflict()的调用会恢复旧环境,而您再次只使用自己的引用。但是,您可以随心所欲,修改库显然可以正常工作。
标签: javascript jquery knockout.js