如何从ko.computed中删除数组项
How to remove array item from ko.computed
我有一个ko.computed,它可以删除已检查的项并将对象添加到数组中,现在我需要能够从另一个数组中存在的ko.computd中删除项。
因此,我有一个带有餐厅列表的模式对话框,当你选择餐厅的复选框时,它会被添加到self.selectedRestaurants,它的id会被添加至self.selectedRestaurantIDs。
selectedRestaurants被绑定到一个表,该表为每个被勾选的餐厅生成一行。selectedRestRestaurant表也有一个复选框,以便您可以选择要删除的项目。
问题是我不知道如何从选定的餐厅中删除项目,这是一个ko.computed可观察的问题。
简化JS
self.selectedRestaurantIDs = ko.observableArray();
self.selectedRecommendationIDs = ko.observableArray();
self.selectedRestaurants = ko.computed(function() {
return ko.utils.arrayMap(self.selectedRestaurantIDs(), function(id) {
return ko.utils.arrayFirst(ko.toJS(self.restaurants), function(item) {
return item.id == id; //selected id will be a string
});
});
});
self.selectedRecommendations = ko.computed(function() {
return ko.utils.arrayMap(self.selectedRecommendationIDs(), function(id) {
return ko.utils.arrayFirst(ko.toJS(self.selectedRestaurants), function(item) {
return item.id == id; //selected id will be a string
});
});
});
带绑定的HTML
<ul class="browse-restaurant-list" data-bind="foreach: $root.restaurants">
<li>
<div class="row">
<div class="col-md-1">
<input type="checkbox" data-bind="value: id, attr: {value: id}, checked: $root.selectedRestaurantIDs"/>
</div>
<div class="col-md-11">
<div class="row">
<div class="col-md-4">
<h4 data-bind="text: name"></h4>
<p class="restaurant-meta"><span>Type: <strong data-bind="text: foodType"></strong></span><span>Rating: <strong data-bind="text: rating"></strong></span></p>
</div>
<div class="col-md-3">
<span><strong>Hours</strong></span>
<p data-bind="foreach: $data.hoursOfOperation">
<span class="hour-day" data-bind="text: day"></span>
<span data-bind="text: open"></span>
<span class="hour-open" data-bind="text: open_time"></span>
<span class="hour-close" data-bind="text: close_time"></span><br/>
</p>
</div>
<div class="col-md-3">
<strong>Address</strong><br/>
<p data-bind="html: fullAddress"></p>
</div>
<div class="col-md-2">
<p><strong>Phone</strong><br/><span data-bind="text: phone"></span></p>
</div>
</div>
</div>
</div>
</li>
</ul>
<tbody data-bind="foreach: $root.selectedRestaurants">
<tr>
<td><input type="checkbox" data-bind="value: id, attr: {value: id}, checked: $root.selectedRecommendationIDs"/></td>
<td data-bind="text: name"></td>
<td data-bind="text: foodType"></td>
<td data-bind="html: fullAddress"></td>
<td data-bind="text: phone"></td>
<td data-bind="text: rating"></td>
</tr>
</tbody>
最后我的removeSelected函数
self.removeSelected = function(item) {
// remove all of the selected restaurant recommendations
self.selectedRestaurants.remove(item);
};
Knockout 3.0包含checkedValue
绑定,这将使它变得更简单、更容易,因为您将能够直接拥有一个可观察的模型对象数组。
您的绑定将成为
<input type="checkbox" data-bind="checkedValue: $data, checked: $root.selectedRestaurants"/>
你的型号将是
self.selectedRestaurants = ko.observableArray();
你不需要计算出的可观测值。
如果你不能使用Knockout 3.0或者你想保留ID数组,你只需要更改removeSelected
函数,从ID数组中删除ID值:
self.removeSelected = function(item) {
self.selectedRestaurantIDs.remove(item.id);
};
参考:http://knockoutjs.com/documentation/checked-binding.html
相关文章:
- Mongoose-在更新中删除数组元素
- 在特定索引处剥离/删除数组中的值
- Framework7:使用swipeout删除数组中的项
- Javascript删除数组中某个位置之后的项
- 通过选中和取消选中复选框来添加和删除数组中的值
- 编写删除数组并添加到列表的函数
- Javascript - 删除数组中的重复值
- 在 Kineticjs 中删除数组中的组
- 如何根据数组内容添加/删除数组中的元素
- 用于删除数组中的零的Javascript函数代码
- Javascript-仅使用pop()方法删除数组中的负值
- 删除数组元素并将它们添加回原来的位置
- 如果一个键匹配,如何删除数组元素
- 无法使用拼接删除数组中的元素
- 如何从ko.computed中删除数组项
- 删除数组中的重复项,为什么此代码不起作用
- 使用另一个数组按索引删除数组中的对象
- 在 jquery 中,如何通过索引[“键”] 或值删除数组元素
- 使用 Lodash 删除数组中的元素
- 按索引删除数组元素