ここから呼び出す標準の 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;
}
}
});
}
ここに含める必要があるものが他にある場合は、お知らせください。