Я изменяю observableArray, изменяю некоторые данные в событии подписки. Сначала я конвертирую ObservableArray, используя ko.to JS (), отображаю данные и изменяю. В конце я вызываю self.menuCategories (jsArray), чтобы снова установить observableArray.
Похоже, я каким-то образом теряю «связь» с observableArray, поскольку оператор foreach в моем коде внезапно ломается.
Либо есть гораздо более простой способ справиться с этим, либо я неправильно обрабатываю наблюдаемые.
КОД:
var MenuWizardModel = function() {
var self = this;
self.menuCategories = ko.observableArray();
self.commonDiscount = ko.observable(0);
// Handling adding items to menuCategories.
self.addNewSubMenuItem = function () {
var newSubMenuItem = new SubMenuItemViewModel(self.newSubMenuItemName(), []);
self.menuCategories.push(newSubMenuItem);
self.newSubMenuItemName(null);
self.createNewSubMenu(false);
}
function SubMenuItemViewModel(name, foodItemList) {
var self = this;
self.name = ko.observable(name);
self.foodItemList = ko.observableArray(foodItemList);
}
self.commonDiscount.subscribe(function(val) {
var discount = parseInt(val) / 100;
var jsArray = ko.toJS(self.menuCategories);
console.log(jsArray)
jsArray = ko.toJS(jsonArray[0].foodItemList.map(item => {
item.price = parseInt(item.price) - (parseInt(item.price) * discount);
return item;
}));
self.menuCategories(jsArray);
});
РАЗМЕТКА:
<div data-bind="foreach: menuCategories">
<h4 data-bind="text: name"></h4>
<div data-bind="foreach: foodItemList" class="list-group">
...
ДАННЫЕ:
введите описание изображения здесь