Вы правы в том, что itemVar
не обновляется - в том смысле, что если добавляется новый элемент массива, представление для этого элемента не имеет контекстного параметра itemVar
(например, ~currentItem
в вашем примере).Я исправлю это в следующем обновлении.Я создал проблему здесь https://github.com/BorisMoore/jsviews/issues/424,, и вы можете проверить ее с обновленным файлом jsviews.js, который вы там найдете.
Другая немедленная проблема, с которой вы столкнулись:
{^{for ~root[1].allItems filter=~menuItem id=id}}
Но фильтр menuItem
зависит от id
, поэтому его необходимо обновлять при каждом изменении id
.Вы можете достичь этого, объявив зависимость от функции menuItem:
$.views.helpers.menuItem.depends = "id";
или используя mapDepends :
{^{for ~root[1].allItems filter=~menuItem id=id mapDepends='id'}}
Вы можете немного упростить вещи,удаляя id=id
и записывая
menuItem: function(item, index, items) {
return item.id == this.view.data.id;
}
Или, что еще лучше, не используйте фильтр для {{for}}
, а просто используйте вспомогательную функцию для прямого возврата отфильтрованных элементов:
getItem: function(id) {
return data[1].allItems.filter(function(item) {
return item.id == id;
});
}
используется следующим образом:
{^{:#index}}
{^{for ~getItem(id)}}
{^{if ~currentItem.isNewItem != '1'}}
Если вы это сделаете, вам больше не нужно использовать mapDepends или .depends в вашей функции фильтра.Изменения в id
приведут к обновлению {^{for ~getItem(id)}}