Jquery KnockoutJs:如何使用checkonknockoutjs删除多个表行?
嗨,我想用KnockoutJs在一个表上删除多行。我不知道为什么我的代码在我试着在桌子上使用时不起作用。我在ul上试过,效果很好 下面是我的代码。需要帮助,请提前感谢:( HTML:Jquery KnockoutJs:如何使用checkonknockoutjs删除多个表行?,jquery,knockout.js,Jquery,Knockout.js,嗨,我想用KnockoutJs在一个表上删除多行。我不知道为什么我的代码在我试着在桌子上使用时不起作用。我在ul上试过,效果很好 下面是我的代码。需要帮助,请提前感谢:( HTML: 看起来你对淘汰赛在这里的运作方式有些困惑 比较一下: <table class="pure-table" id="tbl_ordered_products"> <thead> <tr> <th>
看起来你对淘汰赛在这里的运作方式有些困惑 比较一下:
<table class="pure-table" id="tbl_ordered_products">
<thead>
<tr>
<th>
<input type="checkbox" id="chkAllProducts" data-bind="click: toggleAllProducts" />
</th>
<th><label for="chkAllProducts">Product Name</label></th>
</tr>
</thead>
<tbody data-bind="foreach: orderedProducts">
<tr>
<td>
<input type="checkbox" data-bind="checked: isSelected, attr: {id: htmlId}" />
</td>
<td><label data-bind="text: name, attr: {for: htmlId}"></label></td>
</tr>
</tbody>
</table>
<input type="button" value="Remove Selected" data-bind="click: deleteSelectedProducts" />
- 在您的方法中,产品上没有可观察到的
,但这是拥有工作视图模型的关键isSelected
- 另一方面,您不需要第二个选定产品数组。“选定产品”是产品的子集,可以可靠地动态计算。这意味着:使用计算的可观测值。
在这里非常有用ko.utils.arrayFilter()
- 您的复选框不能有值绑定。它们从上下文中“知道”它们所在的位置,给它们一个值绑定会破坏一切。(您将直接从视图模型(而不是视图)为后续Ajax请求组装数据。复选框值与此无关。)
- 你缺少一个“全部切换”功能,所以我做了一个
- 外观上的改变,但对用户体验至关重要:如果你有复选框,你必须有连接的标签
- 比较
<table class="pure-table" id="tbl_ordered_products">
<thead>
<tr>
<th>
<input type="checkbox" id="chkAllProducts" data-bind="click: toggleAllProducts" />
</th>
<th><label for="chkAllProducts">Product Name</label></th>
</tr>
</thead>
<tbody data-bind="foreach: orderedProducts">
<tr>
<td>
<input type="checkbox" data-bind="checked: isSelected, attr: {id: htmlId}" />
</td>
<td><label data-bind="text: name, attr: {for: htmlId}"></label></td>
</tr>
</tbody>
</table>
<input type="button" value="Remove Selected" data-bind="click: deleteSelectedProducts" />
- 在您的方法中,产品上没有可观察到的
,但这是拥有工作视图模型的关键isSelected
- 另一方面,您不需要第二个选定产品数组。“选定产品”是产品的子集,可以可靠地动态计算。这意味着:使用计算的可观测值。
在这里非常有用ko.utils.arrayFilter()
- 您的复选框不能有值绑定。它们从上下文中“知道”它们所在的位置,给它们一个值绑定会破坏一切。(您将直接从视图模型(而不是视图)为后续Ajax请求组装数据。复选框值与此无关。)
- 你缺少一个“全部切换”功能,所以我做了一个
- 外观上的改变,但对用户体验至关重要:如果你有复选框,你必须有连接的标签
- 比较
值
是对象
时,击退已选中
绑定不起作用。
在Product
对象中使用附加的pbservable属性isChecked
function Product(id, product_number, name, price, quantity, discount, balance) {
var self = this;
self.isChecked = ko.observable(false);
self.id = ko.observable(id);
self.product_code = ko.observable(product_number);
// ...
}
删除行
self.deleteSelectedProducts = function () {
var productToRemove = [];
ko.utils.arrayForEach(self.orderedProducts(), function(product){
if (product.isChecked())
{
productToRemove.push(product)
}
})
self.orderedProducts.removeAll(productToRemove)
}
当
值
是对象时,已选中的敲除
绑定不起作用。
在Product
对象中使用附加的pbservable属性isChecked
function Product(id, product_number, name, price, quantity, discount, balance) {
var self = this;
self.isChecked = ko.observable(false);
self.id = ko.observable(id);
self.product_code = ko.observable(product_number);
// ...
}
删除行
self.deleteSelectedProducts = function () {
var productToRemove = [];
ko.utils.arrayForEach(self.orderedProducts(), function(product){
if (product.isChecked())
{
productToRemove.push(product)
}
})
self.orderedProducts.removeAll(productToRemove)
}
+1这就是它的要点。虽然我会在deleteSelectedProducts()中使用arrayFilter
而不是arrayForEach
方法。这更惯用,可以节省一半的行。+1这是它的要点。虽然我会在deleteSelectedProducts()
方法中使用arrayFilter
而不是arrayForEach
。这更惯用,可以节省一半的行。