我有一个从这里调用的标准 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;
}
}
});
}
如果还有什么我应该在这里包括的,请告诉我。