привязка шаблона - PullRequest
       29

привязка шаблона

5 голосов
/ 14 февраля 2012

У меня есть элемент ul, который заполняется через привязку шаблона.

<script type="text/html" id="someTemplate">
<li>
   <span data-bind="text: someText">
</li>
</script>

<ul data-bind="template: {foreach: someElemets, name: 'someTemplate'}">
</ul>

Но я хочу, чтобы первый li-тег был не li-тегом из шаблона, а другим с кнопкой в ​​нем, и он не будет связан с массивом someElemets. Если я так сделаю

<ul data-bind="template: {foreach: someElemets, name: 'someTemplate'}">
    <li><button data-bind=click: doSomething">Click me</button></li>
</ul>

тогда li-тег с кнопкой будет последним после рендеринга. Как лучше всего решить эту проблему?

Ответы [ 3 ]

12 голосов
/ 14 февраля 2012

Вы можете использовать синтаксис потока управления без контейнеров, привязку данных с помощью тегов комментариев.Нет необходимости в шаблоне. подробнее

<ul>     
    <li><button data-bind=click: doSomething">Click me</button></li>
    <!-- ko foreach: someElemets-->         
    <li>
        <span data-bind="text: someText"></span>
    </li>    
    <!-- /ko -->
</ul> 
7 голосов
/ 29 мая 2014

Это будет делать следующее:

<!-- ko template: { name: 'template-name', data: vm } --> <!-- /ko -->
1 голос
/ 14 февраля 2012

Мне неизвестен простой способ доступа к индексу внутри шаблона.Вы можете использовать параметры шаблона, как описано в Как использовать foreach со специальным первым элементом?

Ваш код будет выглядеть примерно так:

<ul data-bind="template: { name: 'someTemplate', foreach: someElemets, templateOptions: { first: someElemets()[0]} }">
</ul>

<script id="someTemplate" type="text/html">
    <li>
    {{if $item.first === $data}}
      <button data-bind="click: doSomething">Click me</button>
    {{/if}}
    <span data-bind="text: someText">
    </li>
</script>
...