gpt4 book ai didi

javascript - 从嵌套循环中删除 knockout 函数中的父级

转载 作者:行者123 更新时间:2023-11-28 09:20:58 25 4
gpt4 key购买 nike

在我看来,我正在循环遍历一个 observableArray (itemGroup),它有一个属性也是一个 observableArray (item)。我有一种方法可以删除整个 itemGroup,还有一种方法可以从中删除 itemGroup,但我想添加一些逻辑,组中只剩下 1 个项目,删除该项目也应该删除 itemGroup。

这是我的 View 模型和 View 的相关部分的示例。

我的JS

var ItemModel = function(item) {
var self = this;
self.name = ko.observable(item.name);
self.price = ko.observable(item.price);
};

var ItemGroupModel = function(itemGroup) {
var self = this;
self.order = ko.observable(itemGroup.order);
self.items = ko.observableArray(ko.utils.arrayMap(itemGroup.items, function(item){
return new ItemModel(item);
}));
self.type = ko.observable(item.type);

self.removeItem = function(item) {
self.items.remove(item);
}
};

var ViewModel = function(data) {
var self = this;
self.itemGroups = ko.observableArray(ko.utils.arrayMap(data.itemGroups, function(itemGroup) {
return new ItemGroupModel(item);
}));

// some other properties and methods
self.removeItemGroup = function(itemGroup) {
self.itemGroups.remove(itemGroup);
}
};

我的观点

<ul data-bind="foreach: {data: VM.itemGroups, as: 'itemGroup'}">
<li>
<button data-bind="click: $root.VM.removeItemGroup">X</button>
<ul data-bind="foreach: {data: itemGroup.items, as: 'item'}">
<li>
<!-- ko if: itemGroup.items().length > 1 -->
<button data-bind="click: itemGroup.removeItem">X</button>
<!-- /ko -->
<!-- ko ifnot: itemGroup.items().length > 1 -->
<button data-bind="click: function () { $root.VM.removeItemGroup($parent) }">X</button>
<!-- /ko -->
</li>
</ul>
</li>
</ul>

这可行,但对我来说并不理想。据我了解, knockout 应该帮助我摆脱使用像“function () { $root.VM.removeItemGroup($parent) }”这样的匿名函数,但我不知道如何以另一种方式做到这一点。另外,删除 if 和 ifnot 语句也有助于清理。

最佳答案

我想给出我的解决方案

发送 itemGroups 和 items 的索引作为删除方法的参数。

希望您知道如何发送索引

然后检查itemGroups的长度

self.remove(itemGroupsIndex,itemsIndex) {
var itemGroupsLength = self.itemGroups()[itemGroupsIndex].items().length;
if(itemGroupsLength = 1) {

self.itemGroups.remove(itemGroupsIndex);

}
else {

self.itemGroups()[itemGroupsIndex].items.remove(itemsIndex);

}
};

关于javascript - 从嵌套循环中删除 knockout 函数中的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14962424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com