2

我有以下基本结构。我需要能够单独切换每个表的可见性。类似乎不起作用,因为它会用同一个类切换所有。项目数量未知,因此外部 div 的数量未知,我不知道 id,因为它不是唯一的。

<div data-bind="foreach: items">
    // Other pieces of data here...

    <button data-bind="click: myToggleFunction">Hide/Show</button> // This could be image, link or whatever to trigger toggle
    <table>  // Need to toggle tables individually
        //Rows and columns here bound to the elements of each "item"
    </table>
</div>

只是不确定如何让它确定它试图切换哪个表。

4

2 回答 2

6

查看演示

我喜欢toggle为 Knockout 项目提供方便的功能。这是一个。

ko.observable.fn.toggle = function () {
    var obs = this;
    return function () {
        obs(!obs())
    };
};

然后我们可以创建具有可见属性的对象。在这些对象中定义所有表数据。

function Item() {
    var self = this;

    self.visible = ko.observable(true);
}

我们的 ViewModel 包含这些项目的数组。如果你需要,它就在小提琴上。

当我们到达我们的 HTML 时,我们可以visible.toggle()在我们的 click 处理程序中进行设置,它会切换我们的visibleobservable。当我们的属性为真时,我们table也必然可见。Itemvisible

<div data-bind="foreach: items">
    <div>
        <button data-bind="click: visible.toggle()">Toggle</button>
        <table data-bind="visible: visible">
            ...
        </table>
    </div>
</div>
于 2013-07-09T23:34:30.603 回答
0

我能想到的最简单的方法是在视图模型中设置可见性标志。在视图中,在 div 上使用 knockoutjs“if”绑定。(当然,您需要在 div 之外拥有切换链接)。

就像是

 <div data-bind="if: div1Visibility">
     Show this stuff if div1Visibility is true, otherwise don't.
 </div>
 <div data-bind="if: div2Visibility">
     Show this stuff if div2Visibility is true, otherwise don't.
 </div>

您还可以执行以下操作:

<!-- ko if: div1Visibility -->
    Show div1 stuff.
<!-- /ko -->
<!--  ko if: div2Visibility  -->
    Show div2 stuff.
<!--  /ko -->
于 2013-07-09T23:18:23.737 回答