gpt4 book ai didi

javascript - 使用 knockoutjs 获取行的总和并添加和删除行

转载 作者:可可西里 更新时间:2023-11-01 13:30:48 24 4
gpt4 key购买 nike

我是 knockoutjs 的新手。我正在创建一个简单的表并尝试汇总“总计”列中的所有值。另外,我还使用 knockoutjs 实现了“添加列”和“删除列”功能。

问题是添加和删除功能都不起作用。另外,“TotalSurcharge”值未显示在 UI 上。

这是我的js:

// Class to represent a row in the table
function addMaterial() {
this.name = ko.observable("");
this.quantity = ko.observable("");
this.rate = ko.observable(0);
this.formattedTotal = ko.computed(function() {
return this.rate() * this.quantity();
}, this);

}

function documentViewModel(){
var self = this;

//create a mateirals array
self.materials = ko.observableArray([
new addMaterial()
]);

// Computed data
self.totalSurcharge = ko.computed(function() {
var total = 0;
for (var i = 0; i < self.materials().length; i++)
total += self.materials()[i].formattedTotal();
return total;
});

// Operations
self.addMaterial = function() {
self.materials.push(new addMaterial());
}
self.removeMaterial = function(material) { self.materials.remove(material) }

}


ko.applyBindings(new documentViewModel());

这是我的 HTML:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<script type='text/javascript' src='knockout-2.2.0.js'></script>
</head>
<body>

<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<th>Item</th>
<th>Quantity </th>
<th>Rate</th>
<th>Total</th>
</tr>
</thead>
<tbody "foreach: materials">
<tr class="info">
<td><input data-bind="value: name" /></td>
<td><input data-bind="value: quantity" /></td>
<td><input data-bind="value: rate" /></td>
<td data-bind="text: formattedTotal"></td>
<td><a href="#" data-bind="click: $root.removeMaterial">Remove</a></td>
</tr>
</tbody>
</table>
<button data-bind="click: addMaterial, enable: materials().length < 5">Add Row</button>

<h3 data-bind="visible: totalSurcharge() > 0">
Total surcharge: $<span data-bind="text: totalSurcharge().toFixed(2)"></span>
</h3>
</div>

</body>
<script type='text/javascript' src='application.js'></script>
</html>

我检查了浏览器上的控制台错误,但没有收到任何错误。知道我做错了什么吗?

最佳答案

我认为你打算将 Material 绑定(bind)到表体,这是不对的:

<tbody "foreach: materials">

应该是:

<tbody data-bind="foreach: materials">

一旦解决了这个问题,其他一切似乎都可以正常工作。

fiddle

关于javascript - 使用 knockoutjs 获取行的总和并添加和删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420258/

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