【发布时间】:2017-07-02 17:15:23
【问题描述】:
我正在尝试根据通过 foreach 循环创建的相应按钮来显示和隐藏 div 部分。目前,每当我单击按钮时,它都会显示所有 div 部分,而不是按钮所在的部分。我对淘汰赛很陌生,我花了很多时间尝试不同的方法和教程来解决这个问题,但仍然没有成功。
这是视图部分:
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div class="firstDiv">
<!-- ko if: $root.filteredAvailabilities().length > 0 -->
<!-- ko foreach: $root.filteredAvailabilities -->
<div class="secondDiv">
<div class="thirdDiv">
<div class="fourthDiv">
<div class="fifthDiv">
<!-- ko with: Items -->
<div class="sixthDiv">
<!-- ko if: !$root.viewPrices() -->
<input class="actionButton" type="button" data-bind="upperCaseValue: $parents[1].ViewPrices, click: $root.ViewPrices" />
<!-- /ko -->
<!-- ko if: $root.viewPrices() -->
<input class="actionButton" type="button" data-bind="upperCaseValue: $parents[1].HidePrices, click: $root.HidePrices" />
<!-- /ko -->
</div>
<!-- /ko -->
</div>
<!-- ko if: $root.viewPrices() -->
<!-- ko foreach: Rooms -->
<div class="seventhRoomDiv">
<table class="roomPriceTable">
<tr>
<td><span class="roomPriceTableRoomLabel" data-bind="text: Room.Name"></span></td>
</tr>
</table>
</div>
<!-- /ko -->
<!-- /ko -->
</div>
</div>
<!-- ko if: $root.viewPrices() -->
<div class="eighthBottomDiv">
<input class="actionButton chooseRoomButton" type="button" data-bind="upperCaseValue: $parent.ChooseRoom, click: $root.ChooseRoom" />
</div>
<!-- /ko -->
</div>
<!-- /ko -->
<!-- /ko -->
</div>
在视图模型中,它所做的只是将 viewPrices 设置为 true:
/// <summary>
/// View the prices.
/// </summary>
self.ViewPrices = function ()
{
self.viewPrices(true);
};
我只想在单击附加到它的按钮后显示相应的第七个DivRoom,而不是显示全部。
编辑
我尝试使用 Rafael Companhoni 示例并将其应用于我的版本,但在显示 div 时遇到了一些困难。我已经添加了
self.ShowRoomPrice = ko.observable(false);
到视图模型。然后添加 可用性.ShowRoomPrice = false; 到可用性回调,这类似于您创建可观察数组的方式。此外,我添加了
self.Test = function (availability){
availability.ShowRoomPrice = !availability.ShowRoomPrice
model.availability(availability);
};
最后的视图是这样的
<!-- ko if: ShowRoomPrice === true -->
<input class="actionButton" type="button" data-bind="upperCaseValue: 'Show / Hide Prices', click: $root.ChooseHotel" />
<!-- /ko -->
它确实在真假之间改变了 ShowRoomPrice 的状态,但 div 没有出现。是不是还缺少什么?
【问题讨论】:
-
你试过
<!-- ko if: $root.viewPrices -->(没有())吗? -
@Stefan 删除 () 没有任何区别。它仍然显示它们。
-
嗯,看起来您正在使用单个可观察的 ko 变量来管理 div 的状态。如果是这样,您需要确保每个“行”都有自己的状态变量。
-
您应该将所有这些代码 sn-ps 组合成一个可以演示问题的 sn-p 或小提琴。
标签: javascript html knockout.js durandal