【发布时间】:2020-11-02 20:56:37
【问题描述】:
我正在更改 observableArray,修改订阅事件中的一些数据。首先,我使用 ko.toJS() 转换 ObservableArray,通过数据映射并进行更改。最后我调用 self.menuCategories(jsArray) 再次设置 observableArray。
似乎我以某种方式失去了与 observableArray 的“连接”,因为我的代码中的 foreach 语句突然中断。
要么有一种更简单的方法来处理这个问题,要么我没有正确处理 observables。
代码:
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">
...
数据:
【问题讨论】:
标签: javascript arrays knockout.js