2

我正在执行一个返回购物车的 jquery ajax 调用和

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

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

我有一个函数可以设置视图模型并让 Knockout 应用绑定..

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 本身执行刷新(即 LoadCart 需要在存在 CartViewModel 之后调用?

注意我知道 Knockout 提供了动态更新,人们会想知道为什么您需要再次检索购物车。但是我不想在两个地方(视图模型和服务器端)都执行服务器端计算 - 所以再次抓住购物车并更新视图模型会更容易。

4

1 回答 1

0

对于 DOM 错误问题,我怀疑您在 HTML 中错误地设置了绑定,或者由于替换视图模型而遇到冲突。

不要替换您的视图模型。只需更新它。Knockout 真正设计用于更新您的数据,而不是替换它。

于 2013-03-08T16:19:21.517 回答