2

カートを返す jquery ajax 呼び出しを実行しています。

function LoadCart(callback) {
  $.ajax({
    .....removed....

    success: function(cart) {
       callback(cart);
    }
  })
}

ビューモデルを設定し、ノックアウトにバインディングを適用させる機能があります..

function SetupViewModel(cart) {
  cartViewModel = new CartViewModel(cart);
  ko.applyBindings(cartViewModel);
}

これは、ページが読み込まれるときに完全に機能します。

しかし、カートからアイテムを削除すると..

var CartViewModel = function(data) {

  .....removed....
  self.deleteCartLine = function(cart) {
    $.ajax({
      ...removed
      success: function(response) {
         $.jGrowl(response.Message, jGrowlOptions)
         loadCart(SetupViewModel);
      }   
    }
  }
}

カートをロードして、CartViewModel を再度セットアップしようとしました。これは、 NOT_FOUND_ERR DOM Exception 8エラーが発生したときです。

これは、viewModel 自体から更新を実行しようとしているためですか (つまり、CartViewModel の存在後に LoadCart を呼び出す必要がありますか?

: Knockout が動的な更新を提供することは承知しており、なぜカートを再度取得する必要があるのか​​不思議に思うでしょう。しかし、両方の場所 (ビュー モデルとサーバー側) で実行したくないサーバー側の計算があります。そのため、カートを再度取得してビュー モデルを更新する方が簡単です。

4

1 に答える 1

0

DOMエラーの問題については、HTMLでバインディングを誤って設定したか、ビューモデルの置き換えが原因で競合が発生している可能性があります。

ビューモデルを置き換えないでください。更新するだけです。Knockoutは、データを置き換えるのではなく、データを更新するように設計されています。

于 2013-03-08T16:19:21.517 に答える