使用jQuery 1.9解决2.2.0错误

hap*_*400 14 jquery knockout.js jquery-1.9

我复制了一个knockoutjs的例子:

    <!DOCTYPE html>
    <html>
    <head>
      <script src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
    <script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.0/knockout-min.js"></script>

    <meta charset=utf-8 />
    <title>JS Bin</title>

    </head>
    <body>


    <h2>Participants</h2>
    Here are the participants:
    <div data-bind="template: { name: 'person-template', data: buyer }"></div>
    <div data-bind="template: { name: 'person-template', data: seller }"></div>





    <script id="person-template" type="text/html">
        <h3 data-bind="text: name"></h3>
        <p>Credits: <span data-bind="text: credits"></span></p>
    </script>

    <script type="text/javascript">
         function MyViewModel() {
             this.buyer = { name: 'Franklin', credits: 250 };
             this.seller = { name: 'Mario', credits: 5800 };
         }
         ko.applyBindings(new MyViewModel());
    </script>
    </html>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Boa*_*oaz 28

原因

您没有使用最新版本的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没有依赖关系并且是纯粹的JavaScript? (2认同)

Ble*_*der 8

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

所以只需改变:

<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.0/knockout-min.js"></script>
Run Code Online (Sandbox Code Playgroud)

至:

<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js"></script>
Run Code Online (Sandbox Code Playgroud)

它会起作用.