Возможная ошибка jsviews с {^{if}}
В приведенном ниже примере, если я добавлю несколько гостей, а затем удалю 1-го гостя, вся таблица гостей исчезнет и никогда не появится снова, даже если Guest[] не пуст. Что-то не так с {^{if}} здесь или с моим кодом? (Я использую коммит 34)
<div id="frm-reg"></div>
<script id='jsr-registration' type='text/x-jsrender'>
<p><button id="btn-addGuest">Add Guest</button></p>
{^{if Guests.length}}
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
<th></th>
</tr>
{^{for Guests}}
<tr>
<td><input data-link="FirstName" type="text" /></td>
<td><input data-link="LastName" type="text" /></td>
<td><input data-link="Age" type="text" /></td>
<td><button class="btn-remove">Remove</button></td>
</tr>
{{/for}}
</table>
{{/if}}
</script>
<script>
var model={"CampID":3,"FirstName":"a","LastName":"b","Guests":[]};
$.templates({regTmpl: "#jsr-registration"});
$.link.regTmpl("#frm-reg", model)
.on("click", ".btn-remove", function()
{
$.observable(model.Guests).remove( $.view(this).index, 1 );
return false;
});
$("#btn-addGuest").click(function()
{
$.observable(model.Guests).insert(model.Guests.length, {FirstName:"", LastName:"", Age:""});
return false;
});
</script>
1 ответ
Решение
Это результат отсутствия <tbody>
тег в разметке.
Когда вы используете <table>
теги в шаблонах JsRender, используемые с привязкой данных JsViews, необходимо всегда помнить, чтобы включить <tbody>
тег. Браузер все равно вставит один, и в результате синтаксического анализа JsViews будет получена неверная информация о глубине элемента.
Я добавлю предупреждающее сообщение об ошибке в парсере JsViews для этого.