【问题标题】:Knockout foreach binding unordered list淘汰foreach绑定无序列表
【发布时间】:2012-12-25 15:23:35
【问题描述】:

首先,圣诞快乐!

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

我正在使用美妙的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>

但是使用这个淘汰码

<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>

我最终得到的 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>

如何让内部 DIV 包装所有子记录,而不是父记录中的单个子记录??

非常感谢您的帮助,再次祝您圣诞快乐。

【问题讨论】:

  • 不会把 foreach 放在 div 而不是 ul 上做你想做的事吗?
  • 如果我修改了脚本,我宁愿不这样做,如果我能帮忙的话。这更像是一个关于如何使用敲除处理这种类型的 HTML 的问题

标签: html knockout.js


【解决方案1】:

第一条评论是正确的...您只需这样做以生成所需的 HTML 输出:

 <ul>
     <div data-bind="foreach: { data: Column3 }">
         <li><a data-bind="text: Name, attr: { 'href': Url }"></a></li>
     </div>
 </ul>

虽然在 ul 中直接包含 div 并不是完全有效的 HTML,但我不知道您为什么要这样做。

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

 <ul>
     <div>
         <!-- ko foreach: { data: Column3 } -->
             <li><a data-bind="text: Name, attr: { 'href': Url }"></a></li>
         <!-- /ko -->
     </div>
 </ul>

如您在评论中提到的那样,不修改“脚本”就没有(很好的)方法可以获得所需的输出。

【讨论】:

  • 谢谢理查德,“我”不想这样做,“插件”也想要我,但是我没有想到的虚拟元素,它工作得很好,所以标记为回答并感谢您度过这个圣诞节:-)
  • 人们总是忘记虚拟元素,但它们很棒(尤其是当您不想弄乱 DOM 或为您制定严格的规则时)。节日快乐!
猜你喜欢
  • 1970-01-01
  • 2014-05-29
  • 2014-08-20
  • 2015-03-17
  • 2013-03-14
  • 2016-12-12
  • 1970-01-01
  • 2015-10-31
  • 2014-01-10
相关资源
最近更新 更多