2015-05-01 2 views
0

Я пытаюсь создать панель корзины ajax-refresh. Моя корзина покупок указана, но я не могу ее обновить в функции обратного вызова $ .getJSON. мой взгляд и код;knockoutjs обновить или обновить

<div class="panel panel-info"> 
    <div class="panel-heading"> 
     <i class="fa fa-list-ul"></i> Sipariş Listeniz 
    </div> 
    <div class="panel-body"> 
     <div id="cart" data-bind="foreach: Currencies"> 
      <div class=""> 
       <span data-bind="text: Currency"></span> 
       <table class=" table table-striped" data-bind="foreach: Items"> 
        <tr> 
         <td data-bind="text: Code"></td> 
         <td data-bind="text: Amount"></td> 
         <td data-bind="text: Price"></td> 
         <td data-bind="text: LineTotal"></td> 
        </tr> 
       </table> 
      </div> 
     </div> 
    </div> 
    <div class="panel-footer"> 
    </div> 
</div> 

и

var cartViewModel = { 
    Currencies: ko.observableArray() 
}; 

$(function() { 
    ShowCart(); 
}); 

function AddToCart(i, a) { 
    $.getJSON('@Url.Action("AddToCart", "Products")/' + i + '?Amount=' + a, null, function (d) { 
     if (d) 
      ShowCart(); 
    }); 
} 
function ShowCart() { 
    $.getJSON('@Url.Action("GetCart","Products")', null, function (c) { 
     cartViewModel.Currencies = ko.observableArray(c); 
     cartViewModel.Currencies.valueHasMutated(); 
     ko.applyBindings(cartViewModel); 
    }); 
} 

Как я могу обновить связывание в $.getJSON обратного вызова?

ответ

3

Я думаю, ваша проблема в том, что вы переписываете наблюдаемые в своей модели вида.

Все, что вам нужно сделать, это передать новое значение в существующее наблюдаемое.

Попробуйте вместо этого:

function ShowCart() { 
    $.getJSON('@Url.Action("GetCart","Products")', null, function (c) { 
     cartViewModel.Currencies(c); 
    }); 
} 
+0

Спасибо большое, это сработало. –