根据您的描述,我建议采用不同的方法。我建议hotelType
从字符串升级到应用程序的适当部分。hotel
例如,您可以将其设为位于 a和您的$root
(或酒店列表)之间的 ViewModel 。本质上,您的酒店列表将成为一个分组列表,基于hotelType
.
以下 JSON 暗示了我正在谈论的结构:
var data = {
allHotels : [{
hotelType : "B&B",
hotels : [{name: "West Inn", chosen: false},
{name: "East Inn", chosen: true}]
},{
hotelType : "All-inclusive",
hotels : [{name: "North Inn", chosen: false},
{name: "Center Inn", chosen: false},
{name: "South Inn", chosen: false}]
}]};
这将使计算每种类型的酒店数量变得非常容易。在您的视图中会是这样的:
<ul data-bind="foreach: allHotels">
<li>
<span data-bind="text: hotelType"></span>
(<span data-bind="text: hotels().length"></span>)
...foreach: hotels here...
</li>
</ul>
看看这个 jsfiddle来演示我的建议。
酒店的总数也很简单:hotelTypes 所有总数的总和。仅在需要时更新总数:如果从相关集合中删除/添加项目。