【问题标题】:Knockout 2.2.0 error with jQuery 1.9使用 jQuery 1.9 敲除 2.2.0 错误
【发布时间】:2013-01-06 16:48:11
【问题描述】:

我复制了一个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>

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

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

如果有人能解释错误是在 jQuery 还是 KO 中,我将不胜感激。

【问题讨论】:

  • 尝试将 Knockout 更新为 2.2.1
  • 这以前是否适用于早期版本的 jQuery?
  • 它似乎适用于 KO 2.2.1 和 jQuery 1.9.0 jsfiddle.net/MExgF
  • 对,现在我看到它正在与 2.2.1 一起工作,无论如何,bug 还不清楚在哪里

标签: jquery knockout.js jquery-1.9


【解决方案1】:

原因

您使用的不是最新版本的 Knockout。之前的版本 2.2.0 与 jQuery 1.9.x 及更高版本不兼容。见this Knockout dev thread

Knockout 2.2.0 使用 jQuery.clean() 已被弃用且在 1.9 中不存在。

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

解决方案

  1. 考虑更新到与 jQuery 1.9 兼容的 the latest version of Knockout
  2. 如果不能,请使用 jQuery Migrate plugin,它会添加 向后兼容 jQuery 1.9
  3. 如果一切都失败了,您需要恢复到 jQuery 1.8

【讨论】:

  • 困惑...我以为 Knockout 没有依赖项并且是纯 JavaScript?
  • @FooBar Knockout 确实不依赖于 jQuery。但是,它确实包含 jQuery 特定的代码,以便更轻松地一起使用这两个库。一个这样的过时代码 sn-p 包含在 Knockout 2.2.0 中,当 Knockout 与 jQuery 一起使用时会产生错误。请参阅the 2.2.0 source(第 706 行)。
  • 更新了2.2.0 source的链接。
【解决方案2】:

将 Knockout 更新到 2.2.1 为我解决了这个问题:

所以只要改变:

<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.0/knockout-min.js"></script>

收件人:

<script src="http://cdnjs.cloudflare.com/ajax/libs/knockout/2.2.1/knockout-min.js"></script>

它会起作用的。

【讨论】:

    猜你喜欢
    • 2015-05-26
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 2013-07-04
    相关资源
    最近更新 更多