1

我刚刚开始使用 Knockout.Js,并且努力实现了我认为是基本的东西。最烦人的是试图在可观察数组中获取字符串的唯一实例并打印到 ui。

具体来说,我有一个酒店模型,每个都有一个“hotelType”字段。这将是“B&B”或“全包”等。我已经设法将这些酒店类型的唯一列表显示为复选框,并将它们绑定回 observableArray。然后使用此数组过滤显示的酒店列表。然而,我不能做的是提供数组中每个类别类型的计数(即 50 家酒店、40 家 B&B 等)。

我想到的唯一方法是从 Compute 构建新字段,并使用 arrayFilter 来获取过滤数组的长度。不过,这将是相当昂贵和混乱的。

有没有更简单的方法?

4

1 回答 1

1

根据您的描述,我建议采用不同的方法。我建议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 所有总数的总和。仅在需要时更新总数:如果从相关集合中删除/添加项目。

于 2013-06-30T08:39:08.543 回答