KnockoutJS“全球安全”吗?

时间:2016-06-18 19:23:01

标签: javascript jquery knockout.js

the KnockoutJS library是否依赖于全局ko对象以外的任何全局状态?或者是否有时间可以从javascript环境的全局状态(即浏览器中的window.对象)添加/减去其他项目

我问,因为我正在创建一个将部署到网站/ CMS环境中的软件。我希望这个软件是自包含的,而不是依赖外部CDN资源。我想在这个软件中使用KnockoutJS,并确保我使用KnockoutJS不会与网站/ CMS环境使用的任何KnockoutJS实例冲突。我不想有条件地加载外部KnockoutJS资源,因为我想确保Knockout my 软件的版本正在运行我认为它是什么。

我对jQuery有类似的要求 - 我知道我通过修改jQuery库来导出不同的全局变量来实现这一点 - 即var myJquery=...。我想用Knockout的ko变量做同样的事情 - 但是如果KnockoutJS依赖于全局状态,那么这将无法正常工作。

1 个答案:

答案 0 :(得分:3)

  

KnockoutJS库是否依赖于全局ko对象以外的任何全局状态?

几乎没有。除了我知道的kowindow之外,还有两点:

  1. 在一些地方,它检查是否存在({1}}的最低版本,并将其用于内置功能。<​​/ li>
  2. 在某些地方(例如the component default loader),它会检查是否存在需要的库并使用它们(以所谓的库不可知的方式)。
  3. 但KO不会修改 window.jQuery(除了添加window)在任何地方,AFAIK。

      

    我想在这个软件中使用KnockoutJS,并确保我使用KnockoutJS不会与网站/ CMS环境正在使用的任何KnockoutJS实例发生冲突。

    这是另一个问题。让应用程序的多个部分都使用KnockoutJS而不了解彼此有两个主要问题:

    1. 以可能发生冲突的方式共享DOM。最简单的例子是CMS可能会在ko上运行ko.applyBindings,因此任何想要使用不同版本的KO处理其部分DOM的插件都会出现问题。这里不可能提供通用建议,这一切都归结为背景和细节。
    2. 加载两个单独版本的Knockout。显然,如果你 nothing ,加载的第二个版本将覆盖body。虽然应该有解决方法,但您可能需要深入研究KO's source code。基本上,你在最后一段中提到了这一点。