Когда я Добавить карту на мой взгляд, я называю это:Сохранение не работает с нокаутом viewModel?
innerModel.addCard = function() {
// This just adds a card to the UI
var card = new cardViewModel(addCardDto);
innerModel.cards.push(card);
}.bind(this);
Это добавляет пустую карту в пользовательский интерфейс и позволяет вводимые пользователем данные некоторую информацию. Когда они нажимают «Сохранить», я отправляю этот пакет с минимальным минимальным размером по кабелю, сохраняя его на сервере, а затем возвращаю более полный объект. то же самое касается обновления - я отправляю только то, что нужно, и возвращаю полный объект. Вот мой cardViewModel:
var cardViewModel = function(data) {
var self = this;
ko.mapping.fromJS(data, {}, this);
self.isNew = ko.observable(false);
// If the card hasn't been created yet, it won't have a cardId
if (typeof this.cardId === 'undefined') {
this.isNew(true);
}
this.save = function() {
// Implement API call here, one for POST, one for PUT. For now:
// Currently just using a hard-coded piece of data 'cardDto' that mocks the result of an API call
var result = new cardViewModel(cardDto); // Problem is somewhere around here
result.editing(false);
result.isNew(false);
debugger;
// trying to re-assign the object to the result here, but it's not working. No errors from javascript, just no activity when I click "save".
self = result;
};
};
С моей точки зрения я:
<a data-bind="click: save">save</a>
Это работал раньше, когда мой метод сохранения был только это:
this.save = function() {
// Implement API call here, one for POST, one for PUT. For now:
this.editing(false);
this.isNew(false);
};
Что я делаю неправильно?
Я попытался это:
this.save = function() {
// Implement API call here, one for POST, one for PUT. For now:
// Currently just using a hard-coded piece of data 'cardDto' that mocks the result of an API call
var result = new cardViewModel(cardDto); // Problem is somewhere around here
result.editing(false);
result.isNew(false);
debugger;
// trying to re-assign the object to the result here, but it's not working. No errors from javascript, just no activity when I click "save".
ko.mapping.fromJS(result, {}, self); // NEW
};
Но хром умирает без каких-либо ошибок или что-нибудь, когда я запускаю это, он просто говорит: «Опаньки».
Редактировать: Я работал в IE и получаю «размер стека вызовов превышен». Копаем в него сейчас ...
Еще раз спасибо за помощь. Я пробовал это (но с ko.mappingfromJS (resullt, {}, self), и хром просто умирает, когда я запускаю его с сообщением «Aw snap» - нет ошибок js. Любая идея, почему это происходит? – SB2055
Выяснил это - «result» должен был быть «cardDto» в последнем вызове сопоставления, пока я имитирую. Я проходил в новом setViewModel. – SB2055