敲除foreach绑定无序列表

Pow*_*ers 3 html knockout.js

首先,圣诞快乐!

希望没有其他人在圣诞节工作,除非他们是淘汰专家并且真的感觉到帮助我的冲动;-)

我正在使用神话般的jQuery Column Navigation Plugin以多列方式向我的用户显示数据.它在我的静态测试中运行良好,但现在将其实现到生产代码中我已经遇到了一些希望不太难以理清的东西.

它需要一个ul元素内的div,以便在列表变大时允许滚动.这里的问题是我用来创建列的foreach包装div中的每个子元素而不是整个子集合.

例如:

我应该生成看起来像这样的HTML

<div id="myTree">
<ul>
    <div>   <!-- required to allow scrolling within each column -->
        <li>
            <a>Homepage</a>
            <ul>
                <div>
                    <li><a>Contact</a></li>
                    <li><a>Terms &amp; Conditions</a></li>
                    <li><a>Privacy information</a></li>
                </div>
            </ul>
        </li>
        <li>
            <a>Contents</a>
            <ul>
                <div>
                    <li><a>Page 1</a></li>
                    <li>
                        <a>Page 2</a>
                        <ul>
                            <div>
                            <li><a href="./page2.1/">Page 2.1</a></li>
                            <li><a href="./page2.2/">Page 2.2</a></li>
                            </div>
                        </ul>
                    </li>
                    <li><a>Page 3</a></li>
                </div>
            </ul>
        </li>
    </div>
</ul>
Run Code Online (Sandbox Code Playgroud)

但使用这个淘汰代码

<div id="whatever" style="width: 100%">
<ul data-bind="foreach: { data: Column1 }">
    <div>
        <li><a data-bind="text: Name"></a>
            <ul data-bind="foreach: { data: Column2 }">
                <div>
                    <li><a data-bind="text: Name"></a>
                        <ul data-bind="foreach: { data: Column3 }">
                            <div>
                                <li><a data-bind="text: Name, attr: { 'href': Url }"></a></li>
                            </div>
                        </ul>
                    </li>
                </div>
            </ul>
        </li>
    </div>
</ul>
Run Code Online (Sandbox Code Playgroud)

我最终得到的HTML看起来像

<div id="myTree">
<ul>
    <div>   <!-- required to allow scrolling within each column -->
        <li>
            <a>Homepage</a>
            <ul>
                <div>
                    <li><a>Contact</a></li>
                </div>
                <div>
                    <li><a>Terms &amp; Conditions</a></li>
                </div>
                <div>
                    <li><a>Privacy information</a></li>
                </div>
            </ul>
        </li>
        <li>
            <a>Contents</a>
            <ul>
                <div>
                    <div>
                        <li><a>Page 1</a></li>
                    </div>
                    <li>
                        <a>Page 2</a>
                        <ul>
                            <div>
                                <li><a href="./page2.1/">Page 2.1</a></li>
                            </div>
                            <div>
                                <li><a href="./page2.2/">Page 2.2</a></li>
                            </div>
                        </ul>
                    </li>
                    <li><a>Page 3</a></li>
                </div>
            </ul>
        </li>
    </div>
</ul>
Run Code Online (Sandbox Code Playgroud)

我怎样才能让内部DIV包装ALl子进程而不是父进程中的单个子记录?

非常感谢任何帮助,再次感谢圣诞快乐.

Ric*_*out 9

第一条评论是正确的......你只需这样做就可以产生你想要的HTML输出:

 <ul>
     <div data-bind="foreach: { data: Column3 }">
         <li><a data-bind="text: Name, attr: { 'href': Url }"></a></li>
     </div>
 </ul>
Run Code Online (Sandbox Code Playgroud)

虽然div直接使用a ul不是完全有效的HTML,但我不知道你为什么要这么做.

另一种方法是使用虚拟元素:

 <ul>
     <div>
         <!-- ko foreach: { data: Column3 } -->
             <li><a data-bind="text: Name, attr: { 'href': Url }"></a></li>
         <!-- /ko -->
     </div>
 </ul>
Run Code Online (Sandbox Code Playgroud)

如你在评论中提到的那样,没有(好的)方法来获得你想要的输出而不修改"脚本".