jquery knockout.js jquery-1.9

Knockout 2.2.0 error con jQuery 1.9



knockout.js jquery-1.9 (2)

Copié uno de los ejemplos de 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>

Cuando actualicé jQuery a la Versión 1.9 , obtuve el siguiente error:

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

Agradecería que alguien pudiera explicar si el error está en jQuery o KO.


La actualización de Knockout a 2.2.1 resuelve el problema para mí:

Así que solo cambia:

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

A:

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

Y funcionará.


La causa

No estás usando la versión más reciente de Knockout. La versión anterior, 2.2.0, es incompatible con jQuery 1.9.xy on. Ver este hilo de desarrollo de Knockout :

Knockout 2.2.0 usa jQuery.clean () que está en desuso y no existe en 1.9.

Esto significa que Knockout 2.2.0 está llamando a un método jQuery indefinido, lo que desencadena el error JS que ha especificado.

Soluciones

  1. Considere actualizarse a la última versión de Knockout que es compatible con jQuery 1.9
  2. Si no puede, use el complemento jQuery Migrate que agrega compatibilidad con versiones anteriores a jQuery 1.9
  3. Si todo lo demás falla, deberá volver a jQuery 1.8