【问题标题】:Is it possible preserve original layout, when using templates in knockoutjs with foreach?在 foreach 中使用 knockoutjs 中的模板时,是否可以保留原始布局?
【发布时间】:2011-12-07 11:39:06
【问题描述】:

我在使用一些预定义的li 元素在 ul 中渲染模板项目时遇到问题,我希望模板引擎能够尊重:

这就是我想要实现的目标:

<ul data-bind="{template: {name: itemTemplate, foreach: itemsToRender}}">
    <li class="first">some pre-info</li>
     //this is where I'd like knockout to render my templates
    <li class="last">som-post info</li>
</ul>

这是我实际得到的:

<ul data-bind="{template: {name: itemTemplate, foreach: itemsToRender}}">
    //this is where all my templateItems get rendered
    <li class="first">some pre-info</li>
    <li class="last">som-post info</li>
</ul>

一个明显的替代方法是使用渲染整个 ul 的模板,并循环遍历子项,但这会在每次发生更改时渲染整个模板,而不仅仅是更新的项 (li ),即preferred way

【问题讨论】:

    标签: templates knockout.js jquery-templates


    【解决方案1】:

    最好的选择是使用 KO 1.3(在 RC 中)中提供的无容器控制流绑定。

    看起来像:

    <ul>
      <li class="first">some pre-info</li>
      <!-- ko foreach: itemsToRender -->
        <li class="item" data-bind="text: name"></li> 
       <!-- /ko -->
      <li class="last">some post-info</li>
    </ul>
    

    <ul>
      <li class="first">some pre-info</li>
      <!-- ko template: { name: 'itemTemplate', foreach: itemsToRender } -->
      <!-- /ko -->
      <li class="last">some post-info</li>
    </ul>
    
    <script id="itemTemplate" type="text/html">
        <li class="item" data-bind="text: name"></li> 
    </script>
    

    示例:http://jsfiddle.net/rniemeyer/tzJU3/

    【讨论】:

    • 没有意识到 1.3 现在在 RC 中。肯定要看看它。由于我没有指定我当前使用的是 KO 1.2.1,我会接受答案......而且似乎 1.2.1 似乎也不能解决这个问题。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多