使用jQuery 1.9解决2.2.0错误

我复制了一个knockoutjs的例子:

      JS Bin   

Participants

Here are the participants:

Credits:

function MyViewModel() { this.buyer = { name: 'Franklin', credits: 250 }; this.seller = { name: 'Mario', credits: 5800 }; } ko.applyBindings(new MyViewModel());

当我将jQuery更新到版本1.9时 ,我遇到以下错误:

 Uncaught TypeError: Object function (e,t){return new st.fn.init(e,t,X)} has no method 'clean' 

如果有人能解释这个bug是在jQuery还是KO,我会很感激。

原因

您没有使用最新版本的Knockout。 以前的版本2.2.0与jQuery 1.9.x和on不兼容。 看到这个Knockout开发线程 :

Knockout 2.2.0使用的是jQuery.clean(),它已被弃用,在1.9中不存在。

这意味着Knockout 2.2.0正在调用未定义的jQuery方法,从而触发您指定的JS错误。

解决方案

  1. 考虑更新到与jQuery 1.9兼容的最新版Knockout
  2. 如果你不能,请使用jQuery Migrate插件 ,它为jQuery 1.9增加了向后兼容性
  3. 如果所有其他方法都失败了,您将需要恢复到jQuery 1.8

将Knockout更新为2.2.1可以解决我的问题:

  • 2.2.0 : http : //jsfiddle.net/UDSBC/2/
  • 2.2.1 : http : //jsfiddle.net/UDSBC/1/

所以只需改变:

  

至:

  

它会起作用。