【问题标题】:Knockout: Toggle table visibility inside foreach div淘汰赛:在 foreach div 中切换表的可见性
【发布时间】:2013-07-07 17:53:22
【问题描述】:

我有以下基本结构。我需要能够单独切换每个表的可见性。类似乎不起作用,因为它会用同一个类切换所有。项目数量未知,因此外部 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>

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

【问题讨论】:

  • “我不知道 id 因为它不是唯一的”?那个怎么样?所有 id 必须是唯一的。

标签: jquery knockout.js


【解决方案1】:

See a Demo

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

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(),这会切换我们的 visible observable。当我们的Item 的visible 属性为真时,我们的table 也必然可见。

<div data-bind="foreach: items">
    <div>
        <button data-bind="click: visible.toggle()">Toggle</button>
        <table data-bind="visible: visible">
            ...
        </table>
    </div>
</div>

【讨论】:

  • 这将为我指明正确的方向。麻烦的是,我没有在客户端上定义模型。查询返回的 json 只是放入一个 ko.observablearray([]) 中。我不知道如何向这种“动态”创建的对象类型添加新属性。抱歉,刚接触客户端工作。
【解决方案2】:

我能想到的最简单的方法是在视图模型中设置可见性标志。在视图中,在 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 -->

【讨论】:

  • 天啊...获取 html cmets 并不好玩。
  • 尼克,你知道的;问题不在于评论标签;它是文本和代码之间必需的空行。
  • 啊,谢谢FRB!这是我第一次在 SO 上尝试淘汰 html 评论风格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 2011-12-05
  • 2016-03-12
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多