Подтвердить что ты не робот

Ошибка нокаута 2.2.0 с помощью 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>

Когда я обновил jQuery до версии 1.9, у меня появилась следующая ошибка:

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

Я был бы признателен, если бы кто-нибудь мог объяснить, есть ли ошибка в jQuery или KO.

4b9b3361

Ответ 1

Причина

Вы не используете самую последнюю версию Knockout. Предыдущая версия, 2.2.0, несовместима с jQuery 1.9.x и дальше. См. этот поток нокаутов для разработчиков:

В нокаут 2.2.0 используется jQuery.clean(), который устарел и не существует в 1.9.

Это означает, что Knockout 2.2.0 вызывает метод undefined jQuery, тем самым вызывая указанную JS-ошибку.

Решения

  • Рассмотрите возможность обновления до последней версии нокаута, которая совместима с jQuery 1.9
  • Если вы не можете, используйте jQuery Migrate плагин, который добавляет обратная совместимость с jQuery 1.9
  • Если все остальное не удастся, вам нужно вернуться к jQuery 1.8

Ответ 2

Обновление Knockout до версии 2.2.1 решает проблему для меня:

Итак, просто измените:

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

To:

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

И это сработает.