我正在开发一个Asp.Net MVC应用程序,其中我有一个html表,其中数据显示在按产品名称使用foreach loop in Knockout JS
分组的组中。现在,我想在每个产品名称的侧面实现一个隐藏和显示按钮,使用户可以使用按钮隐藏和查看与该产品相关的数据。
现在,下面的图片显示了我的表格如何放在网页上
在上图中,Heavy, Sweet,Sour
是我的products
,它们会突出显示,并且在其下方有一些数据行,应该会在点击按钮时隐藏。
我使用以下脚本来构建html表中的数据
<!--ko foreach: productshorizontal-->
<tr>
<td class="clientproductHeader" data-bind="text: $data"></td>
<td><input type="submit" class="btn btn-danger clientproductHeader" value="Hide"></td>
<td class="clientproductHeader" colspan="13"></td>
</tr>
<tbody data-bind="foreach: ko.observableArray($root.datainputhorizontal()).extendsdistinct('Product').index.Product()[$data]">
<tr>
<td data-bind="text: Grade"></td>
<td data-bind="text: Term"></td>
<td data-bind="text:Pipeline"></td>
<td data-bind="text: Index"></td>
<td data-bind="text: Bid3"></td>
<td data-bind="text: Bid2"></td>
<td data-bind="text: Bid1"></td>
<td data-bind="text: Ask1"></td>
<td data-bind="text: Ask2"></td>
<td data-bind="text: Ask3"></td>
</tr>
</tbody>
<!--/ko-->
My View模型,如答案
var CanadianCrudeViewModel = function (CanadianContext) {
var self = this;
self.productshorizontal = ko.observableArray();
----
----
----
self.productshorizontal = ko.computed(function () {
var productshorizontal = ko.utils.arrayMap(ko.observableArray(self.datainputhorizontal()).extendsdistinct('Product')(), function (item) {
return item.Product;
})
return ko.utils.arrayGetDistinctValues(productshorizontal);
}, this);
ProductViewModel = function (name) {
this.name = name;
this.isRelatedDataVisible = ko.observable();
}
function RootViewModel(data) {
var productModels = data.map(function(name) {
return new ProductViewModel(name);
});
this.productshorizontal = ko.observableArray(productModels);
this.toggleReleatedDataVisible = function (prod) {
prod.isRelatedDataVisible(!prod.isRelatedDataVisible());
}
}
和html是asfollows
<!--ko foreach: productshorizontal-->
<tr>
<td class="clientproductHeader" data-bind="text: name"></td>
<td><input type="button" class="btn btn-danger clientproductHeader" data-bind="click: toggleReleatedDataVisible"></td>
<td class="clientproductHeader" colspan="13"></td>
</tr>
<!-- ko if: isRelatedDataVisible -->
<tbody data-bind="foreach: ko.observableArray($root.datainputhorizontal()).extendsdistinct('Product').index.Product()[$data]">
....
</tbody>
<!-- /ko -->
<!-- /ko -->
但问题是在javascript控制台中它给我一个例外
Error: Cannot find closing comment tag to match: ko if: isRelatedDataVisible
不确定原因
答案 0 :(得分:0)
要隐藏/显示的行应该具有绑定到可观察对象的可见事物。每当用户单击一个按钮(按钮应该具有单击绑定)时,它可以更新可观察的行的值,使得行可见或不可见。
您可以在此fiddle
中了解相关信息 <tbody data-bind="foreach: people">
<tr data-bind="visible: $parent.hideArray.indexOf(myParent) == -1">
<td data-bind="text: name"></td>
<td data-bind="text: surname"></td>
<td>
<button data-bind="visible: !myParent, click: $parent.showHide, text: buttonText"></button>
</td>
</tr>
</tbody>