Можно ли сохранить оригинальный макет при использовании шаблонов в knockoutjs с foreach? - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть проблема при рендеринге шаблонных элементов в ul с некоторыми предопределенными li элементами, которые я бы хотел использовать в шаблонизаторе:

Вот чего я пытаюсь достичь:

<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 ), который является предпочтительным способом .

1 Ответ

1 голос
/ 07 декабря 2011

Наилучшим вариантом является использование безконтейнерных привязок потока управления, доступных в КО 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/

...