javascript - 可见绑定(bind)和动态 css 绑定(bind)

标签 javascript css knockout.js

在此示例中,Knockout 按预期工作。我正在寻找一种替代方法来实现在每个第二项上使用 CSS 类 .last 动态填充网格的目标。在某种程度上,我可能正在寻找一种不同的方法。

带有描述的 JSFiddle

我的问题说明在http://jsfiddle.net/96vdD/7/并在此处描述:

三个通过foreach。添加三个 div 到网格。 动态地,Knockout 将 last 的 css 类分配给来自 foreach 的每一秒 div

同时,每个people的visibility属性决定了他是否会显示在网格中。

CSS 将去除网格中每个 .last div 的边距,以防止第二个 div 移动到下一个'排'。 CSS 中的一种常见布局技术。

看看当您将 Charles 的可见性更改为 true 并运行 JSFiddle 时会发生什么。

问题

示例中的第二个人 Charles 没有显示在网格中(因为他的属性 visible 设置为 false)。但是,Denise 仍然被移动到下一行。 Knockout 向 Charles 添加了一个 style="display:none",但也对他应用了 class="last" 规则,而理想情况下我希望 Denise 收到 class="last" 因为在视觉上她是网格中的第二个

问题

在应用 class="last" 规则时,如何让 Knockout 忽略 !visible 元素?

最佳答案

您可以创建一个只包含可见人的计算数组:

self.visiblePeople = ko.computed(function() {
    return ko.utils.arrayFilter(self.people(), function(person) {
        return person.visible;
    });
});

然后在你的 html 中绑定(bind)它:

<div class="wrapper" data-bind="foreach: visiblePeople">

fiddle - http://jsfiddle.net/96vdD/8/

关于javascript - 可见绑定(bind)和动态 css 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24762188/

相关文章:

knockout.js - 从动态创建的下拉列表中获取选定的值

javascript - Knockout.js - 尝试将 JSON 添加到 View 模型未定义

javascript - 我如何确定我的 Ajax 调用已完全完成?

css - 如何使用 flexbox 布局隐藏我的粘性页脚?

iOS11 上的 HTML 选择输入错误

javascript - JQuery .hover() 和 .bind() 试图控制动画行为

javascript - 可滚动 div 内的弹出层

javascript - 如何使 Angular 子范围刷新?

java - 捕获按键按下的 ajax 事件,无需输入字段

javascript - 如何在 AngularJS 中将值从 Controller 传递到输入 HTML?