2013-07-09 44 views
0

我有一個標準的AJAX調用,我在這裏呼籲:在AJAX調用之後knockout沒有更新observable?

dataservice.createCard(card, function(serverData) { 
    var newCard = new cardViewModel(serverData); 
    // I see the right cardId here - from the server 
    var index = innerModel.cards().indexOf(card); 
    if (index !== -1) { 
     // this gets hit but the DOM doesn't change 
     innerModel.cards()[index] = newCard; 
    } 
} 

在我看來,我有這樣的:

<!-- ko foreach: data().cards --> 
    <p data-bind="text: cardId"></p> 
<!-- /ko --> 

現在,當我點擊「添加卡」,我插入一個空白cardViewModel進入卡片清單。當用戶點擊保存,我回發到服務器,當服務器響應異步調用時,在回調中,我嘗試用真實數據替換舊的「模板」。

問題是 - 真正的數據永遠不會更新,除非我刷新頁面。如果我將初始cardId設置爲某個字符串,那麼在我得到真實數據之後,該字符串將保留,此時它應該變成一個Id。

我錯過了什麼?

我innerModel映射:

var mapping = { 
    create: function (options) { 
     //customize at the root level. 
     var innerModel = ko.mapping.fromJS(options.data, { 
      'cards': { 
       create: function (options) { 
        var card = new cardViewModel(options.data); 
        return card; 
       } 
      } 
     }); 
} 

如果有什麼我需要在這裏包括,讓我知道。

回答

0

更換

innerModel.cards()[index] = newCard; 

innerModel.cards.splice(index, 1, newCard); 

第一行不允許淘汰賽知道發生了更新。

相關問題