Шаблон JQuery внедряетна каждом элементе foreach?Зачем? - PullRequest
1 голос
/ 26 октября 2011

Я использую шаблоны jQuery с Knockout, по какой-то причине при использовании foreach, <!----> магически вставляется между каждым элементом.Это почему?И как мне от этого избавиться?

<ol data-bind='template: { name: "list_item_template", foreach: showable }'></ol>

<script type="text/html" id="list_item_template">
    <li class="listItem clearfix" id="list_item_${id}">
         ${title}
    </li>
</script>

Это приводит к:

<ol data-bind='template: { name: "list_item_template", foreach: showable }'>
 <!---->
 <li class="listItem clearfix" id="list_item_301">Stuff</li> 
 <!---->
 <li class="listItem clearfix" id="list_item_302">Stuff</li> 
 <!---->
 <li class="listItem clearfix" id="list_item_303">Stuff</li> 
 <!---->
 <li class="listItem clearfix" id="list_item_304">Stuff</li>  
</ol>

Спасибо

Ответы [ 2 ]

1 голос
/ 26 октября 2011

Несколько мыслей: (1) Подтвердили ли вы, что используете последнюю версию jquery.tmpl.js?

https://raw.github.com/jquery/jquery-tmpl/master/jquery.tmpl.js

И я предполагаю, что ваша viewModel работает нормально? Вот модель представления, которую я использовал в своем локальном тесте. Я полагаю, что у вас выглядит похоже?

var vm = {
    showable: ko.observableArray([
        { id: 0, title: 'foo' },
        { id: 1, title: 'bar' },
        { id: 2, title: 'baz' },
        { id: 3, title: 'bam' }
        ])
};

(2) Кстати, я понимаю, что Knockout скоро заменит jquery.tmpl на jsRender, так что, надеюсь, вы не слишком привязаны к .tmpl:

https://github.com/BorisMoore/jsrender

(3) В качестве обходного пути вы рассматривали вопрос о замене использования шаблонов с использованием самого нокаута? Это уберет вашу зависимость от jquery.tmpl. Таким образом, ваш шаблон будет выглядеть примерно так:

<script type="text/html" id="list_item_template">
    <li data-bind="text:title, attr:{id:'list_item_'+id}" class="listItem clearfix" ></li>
</script> 
0 голосов
/ 30 октября 2011

У меня нет прямого ответа на ваш вопрос, но у меня есть потенциальная возможность обойти.

Я не знаю, почему jQuery tmpl добавляет комментарий к каждому элементу.Тем не менее, я бы спросил, действительно ли это jQuery Tmpl, который вводит комментарий, а не KnockoutJS.Чтобы проверить, попробуйте использовать шаблон без KnockoutJS, посмотрите, появляется ли комментарий HTML.

Наконец, имейте в виду, что последняя версия Knockout (1.3 beta) имеет свой собственный механизм шаблонов.;Вы можете исправить это, используя собственный шаблонизатор.

...