我正在修改一个observableArray,在一个订阅事件中修改一些数据。首先,我使用ko.toJS()转换ObservableArray,通过数据进行Map,然后进行修改。最后,我调用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">
...
数据:
1条答案
按热度按时间y53ybaqx1#
我认为处理这类事情的最好方法是在fooditem中添加一个计算出的可观察项,它捕捉全局折扣并计算折扣价格。
如下所示。
第一个