Хорошо, так как я не получил ответов, я пошел по второму маршруту, и это кажется хорошим решением.
Сценарий в разделе head
заполняет глобально видимый список данных items
с JSON, сгенерированным на месте сервером.
Затем, где вкладки div
были определены ранее, я поместил скрипт для их генерации на лету:
<div id="tabs" class="ui-tabs">
<ul class="ui-tabs-nav"></ul>
<script type="text/javascript">
for (var i = 0; i < items.length; i++)
createTab(items[i], i);
</script>
</div>
createTab
функция определена в отдельном файле JS и управляет созданием div
и элементами списка для ul
:
function createTab(item, index) {
createPanel(item, index).appendTo($('#tabs'));
createTabItem(index).appendTo($('.ui-tabs-nav'));
}
// creates list item with a href="#tabs-1..n"
function createTabItem(index) {
return $('<li></li>').append(
$('<a></a>').attr('href', '#tabs-' + (index+1))
);
}
// creates a div for tab
function createPanel(item, index) {
var panel = $('<div class="ui-tabs-panel"></div>')
.attr('id', 'tabs-'+ (index+1)); // id = "tabs-1..n"
if (index > 0) panel.addClass('ui-tabs-hide'); // hide all tabs but the first
// whatever you need to fill the tab with
createPicture(item).appendTo(panel);
createDescription(item).appendTo(panel);
return panel;
}
Поскольку все это происходит до загрузки страницы, мне не пришлось менять код, управляющий навигацией по вкладкам.
Конечно, это еще не включает предварительную выборку изображений, но делает это намного проще, поскольку создание вкладок происходит в одном месте, и им становится легче управлять.