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í:
- 2.2.0 : http://jsfiddle.net/UDSBC/2/
- 2.2.1 : http://jsfiddle.net/UDSBC/1/
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
- Considere actualizarse a la última versión de Knockout que es compatible con jQuery 1.9
- Si no puede, use el complemento jQuery Migrate que agrega compatibilidad con versiones anteriores a jQuery 1.9
- Si todo lo demás falla, deberá volver a jQuery 1.8