Javascript 使用展开/折叠将js foreach绑定敲除

Javascript 使用展开/折叠将js foreach绑定敲除,javascript,html,knockout.js,Javascript,Html,Knockout.js,我读了几篇教程,花了几个小时试着让它发挥作用。我的目标是让多个链接在单击时展开/折叠。到目前为止,我有以下几点: HTML: 我知道现在我在父级上有扩展状态,这就是为什么所有东西都会扩展/崩溃。如何让每个项目跟踪其自身的展开/拼贴状态?您通过引用父项为所有可观察项目创建了一个依赖项,这就是这里的问题 因此,您需要对每个列表项具有独立的依赖关系,并使 使用引用当前上下文的$data。 所以这里的技巧是为每个listitem创建一个实例 视图: 工作样本那么,通过引用父对象,您为所有可观察对象创建了

我读了几篇教程,花了几个小时试着让它发挥作用。我的目标是让多个链接在单击时展开/折叠。到目前为止,我有以下几点:

HTML:

我知道现在我在父级上有扩展状态,这就是为什么所有东西都会扩展/崩溃。如何让每个项目跟踪其自身的展开/拼贴状态?

您通过引用父项为所有可观察项目创建了一个依赖项,这就是这里的问题

因此,您需要对每个列表项具有独立的依赖关系,并使 使用引用当前上下文的$data。 所以这里的技巧是为每个listitem创建一个实例

视图:

工作样本

那么,通过引用父对象,您为所有可观察对象创建了一个单一的依赖关系,这就是这里的问题

因此,您需要对每个列表项具有独立的依赖关系,并使 使用引用当前上下文的$data。 所以这里的技巧是为每个listitem创建一个实例

视图:


我只是在解决一些非常类似的问题,我认为有一种方法可以在不向ViewModels添加任何逻辑的情况下解决问题

以下代码适用于每行都可展开的表:

<tbody data-bind="foreach: payments">
    <tr style="cursor: pointer" data-toggle="collapse" data-bind="attr: {'data-target': '#row' + $index()}">
        <td>Column 1 content</td>
    </tr>
    <tr data-bind="attr: {id: 'row' + $index()}" class="collapse">
        <td>
            Detail....
        </td>
    </tr>
</tbody>
它使用2次attr绑定,一次用于定义生成的详细信息行的id,一次用于设置折叠切换的数据目标

您的示例可以按照以下方式进行修改,并且您根本不需要扩展的observable

<ul data-bind="foreach: items">
<a href="#" data-toggle="collapse" data-bind="attr: {'data-target': '#row' + $index()}"></a> 
    <button data-bind="text:name"></button>
    <div data-bind="attr: {id: 'row' + $index()}" class="collapse">
        <input data-bind="value:name"></input>
    </div>
</ul>

我只是解决了一些非常类似的问题,我认为有一种方法可以在不向ViewModels添加任何逻辑的情况下解决问题

以下代码适用于每行都可展开的表:

<tbody data-bind="foreach: payments">
    <tr style="cursor: pointer" data-toggle="collapse" data-bind="attr: {'data-target': '#row' + $index()}">
        <td>Column 1 content</td>
    </tr>
    <tr data-bind="attr: {id: 'row' + $index()}" class="collapse">
        <td>
            Detail....
        </td>
    </tr>
</tbody>
它使用2次attr绑定,一次用于定义生成的详细信息行的id,一次用于设置折叠切换的数据目标

您的示例可以按照以下方式进行修改,并且您根本不需要扩展的observable

<ul data-bind="foreach: items">
<a href="#" data-toggle="collapse" data-bind="attr: {'data-target': '#row' + $index()}"></a> 
    <button data-bind="text:name"></button>
    <div data-bind="attr: {id: 'row' + $index()}" class="collapse">
        <input data-bind="value:name"></input>
    </div>
</ul>

谢谢这对我很有用。有没有可能不用java脚本调用就可以折叠所有其他扩展的选项卡?谢谢。这对我很有用。我们是否可以在不调用java脚本的情况下折叠所有其他扩展的选项卡?
<tbody data-bind="foreach: payments">
    <tr style="cursor: pointer" data-toggle="collapse" data-bind="attr: {'data-target': '#row' + $index()}">
        <td>Column 1 content</td>
    </tr>
    <tr data-bind="attr: {id: 'row' + $index()}" class="collapse">
        <td>
            Detail....
        </td>
    </tr>
</tbody>
<ul data-bind="foreach: items">
<a href="#" data-toggle="collapse" data-bind="attr: {'data-target': '#row' + $index()}"></a> 
    <button data-bind="text:name"></button>
    <div data-bind="attr: {id: 'row' + $index()}" class="collapse">
        <input data-bind="value:name"></input>
    </div>
</ul>