2013-01-23 13 views
13

skopiowałem jeden z przykładów knockoutjs:Knockout 2.2.0 Błąd z jQuery 1.9

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

Kiedy aktualizowane jQuery Wersja 1.9, ja dostałem następujący błąd:

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

Byłbym wdzięczny, gdyby ktoś mógł wyjaśnić, czy błąd jest w jQuery lub KO.

+5

Spróbuj zmienić Knockout na '2.2.1'. – Blender

+0

Czy to wcześniej działało z wcześniejszą wersją jQuery? – halfer

+0

Wygląda na to, że działa z KO 2.2.1 i jQuery 1.9.0 http://jsfiddle.net/MExgF/ – nemesv

Odpowiedz

28

Przyczyna

Nie używasz najnowszej wersji nokaut. Poprzednia wersja, 2.2.0, jest niekompatybilna z jQuery 1.9.x i włączoną. Zobacz this Knockout dev thread:

Knockout 2.2.0 uses jQuery.clean() which is deprecated and does not exist in 1.9.

Oznacza to, że Knockout 2.2.0 dzwoni niezdefiniowanej metody jQuery, tym samym powodując błąd JS został podany.

Solutions

  1. rozważyć aktualizację do the latest version of Knockout, który jest zgodny z jQuery 1.9
  2. Jeśli nie, użyj jQuery Migrate plugin który dodaje kompatybilność wsteczną do jQuery 1.9
  3. Jeśli wszystko inne zawiedzie, musisz wrócić do wersji jQuery 1.8
+1

Mylić ... Myślałem, że Knockout nie ma zależności i czy jest czystym JavaScript? – SimonGates

+1

@FooBar Knockout faktycznie nie jest zależny od jQuery.Jednak zawiera kod specyficzny dla jQuery, aby ułatwić korzystanie z dwóch bibliotek razem. Jeden taki nieaktualny fragment kodu został uwzględniony w Knockout 2.2.0 i wygenerował błąd, gdy Knockout był używany z jQuery. Zobacz [źródło 2.2.0] (https://github.com/SteveSanderson/knockout/blob/gh-pages-2.2.0/js/knockout-2.2.0.debug.js) (linia 706). – Boaz

+0

Rozumiem, dziękuję boaz – SimonGates

8

Aktualizacja Knockout do 2.2.1 rozwiązuje problem dla mnie:

Więc po prostu zmienić:

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

Do:

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

i będzie ona działać.

Powiązane problemy