14

我复制了一个 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 中,我将不胜感激。

4

2 回答 2

28

原因

您没有使用最新版本的 Knockout。之前的版本 2.2.0 与 jQuery 1.9.x 及更高版本不兼容。请参阅此淘汰赛开发线程

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
于 2013-01-23T09:10:13.553 回答
8

将 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>

它会起作用的。

于 2013-01-23T09:09:46.580 回答