14

ノックアウトjsの例の1つをコピーしました:

    <!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 をVersion 1.9に更新すると、次のエラーが発生します。

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

バグが jQuery にあるのか KO にあるのかを誰かが説明してくれれば幸いです。

4

2 に答える 2

28

原因

Knockout の最新バージョンを使用していません。以前のバージョン 2.2.0 は、jQuery 1.9.x 以降と互換性がありません。このノックアウト dev スレッドを参照してください。

Knockout 2.2.0 は、非推奨で 1.9 には存在しない jQuery.clean() を使用します。

これは、Knockout 2.2.0 が未定義の jQuery メソッドを呼び出しているため、指定した JS エラーが発生していることを意味します。

ソリューション

  1. jQuery 1.9 と互換性のある最新バージョンの Knockoutへの更新を検討してください
  2. できない場合は、jQuery 1.9 に下位互換性を追加するjQuery Migrate プラグインを使用してください。
  3. 他のすべてが失敗した場合は、 jQuery 1.8に戻す必要があります。
于 2013-01-23T09:10:13.553 に答える
8

Updating Knockout to 2.2.1 solves the problem for me:

So just change:

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

And it'll work.

于 2013-01-23T09:09:46.580 に答える