2013-01-23 83 views
13

我複製的knockoutjs的例子之一:淘汰賽2.2.0錯誤使用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> 

當我更新了jQuery 1.9版,我得到了以下錯誤:

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

我很感激,如果有人可以解釋,如果錯誤是在jQuery或KO。

+5

嘗試更新Knockout到'2.2.1'。 – Blender

+0

以前是否使用jQuery的早期版本? – halfer

+0

它似乎可以與KO 2.2.1和jQuery 1.9.0一起使用http://jsfiddle.net/MExgF/ – nemesv

回答

28

原因

您沒有使用淘汰賽的最新版本。以前的版本2.2.0與jQuery 1.9.x和以上版本不兼容。見this Knockout dev thread

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

這意味着淘汰賽2.2.0呼籲未定義jQuery的方法,從而觸發您指定的JS錯誤。

解決方案

  1. 考慮更新到the latest version of Knockout這是與jQuery 1.9
  2. 兼容。如果不能,使用jQuery Migrate plugin這增加 向後兼容的jQuery 1.9
  3. 如果一切都失敗了,您需要恢復到jQuery 1.8
+1

困惑......我以爲Knockout沒有依賴關係,並且是純粹的JavaScript? – SimonGates

+1

@FooBar Knockout的確不依賴於jQuery。但是,它確實包含jQuery特定的代碼,以便更容易地將這兩個庫一起使用。一個這樣過時的代碼片段被包含在Knockout 2.2.0中,並且在Knockout與jQuery一起使用時產生了一個錯誤。請參閱[2.2.0源代碼](https://github.com/SteveSanderson/knockout/blob/gh-pages-2.2.0/js/knockout-2.2.0.debug.js)(行706)。 – Boaz

+0

我看到了,謝謝boaz – SimonGates

8

更新淘汰賽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> 

,它會工作。