【问题标题】:knockout not updating observable after AJAX call?AJAX 调用后淘汰赛不更新可观察到的?
【发布时间】:2013-07-09 20:25:16
【问题描述】:

我有一个从这里调用的标准 ajax 调用:

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;
                }
            }
        });
}

如果还有什么我应该在这里包括的,请告诉我。

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

    替换

    innerModel.cards()[index] = newCard;
    

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

    第一行不允许 Knockout 知道发生了更新。

    【讨论】:

      猜你喜欢
      • 2015-01-25
      • 2021-09-19
      • 2013-07-18
      • 2015-02-26
      • 1970-01-01
      • 2018-03-30
      • 2014-05-13
      • 2023-03-11
      • 2015-05-31
      相关资源
      最近更新 更多