Не отпускает тема UI/UX. Предлагаю проверить, насколько удобно работать с полученным в предыдущей статье интерфейсом в разрезе использования данных. В качестве источника данных используем таблицу на Google Drive. Раздавать данные будем с помощью Content Service.
Создаем таблицу, вводим тестовые данные.
Создаем скрипт, пишем код.
Сохраняем версию скрипта, публикуем.
Удаляем данные блока journal (весь код - в предыдущей статье).
Добавляем в скрипт интерфейса код, который будет получать данные сразу после загрузки интерфейса и обновлять их в блоке journal каждые 5 секунд. Для реальных условий - слишком часто, а для демонстрации - вполне.
Вуаля. Подобным образом можно решить с любым блоком полученного интерфейса.
Создаем таблицу, вводим тестовые данные.
Создаем скрипт, пишем код.
function doGet(e) { var ssId = '0AkYcK5KeNe1tdGttSUwwZGIxNzdzZExQTXc3YlVseUE'; // ID таблицы var shName = 'journal'; // имя листа var data = SpreadsheetApp.openById(ssId).getSheetByName(shName).getDataRange().getValues(); var headers = data[0]; var res = []; for (var i=1; i<data.length; i++) { var obj = {}; for (var j=0; j<data[0].length; j++) { obj[data[0][j]] = data[i][j]; } res.push(obj); } return ContentService.createTextOutput( e.parameters.prefix + '(' + JSON.stringify(res) + ')') .setMimeType(ContentService.MimeType.JAVASCRIPT); }
Сохраняем версию скрипта, публикуем.
Удаляем данные блока journal (весь код - в предыдущей статье).
<div id="journal"> <img id = "journal_image" /> <div id="journal_text"> <div id="journal_text_header"></div> <div id="journal_text_copyright"></div> <div id="journal_text_published"></div> <div id="journal_text_edited"></div> <div id="journal_text_rank"></div> <div id="journal_text_impact"></div> </div> </div>
Добавляем в скрипт интерфейса код, который будет получать данные сразу после загрузки интерфейса и обновлять их в блоке journal каждые 5 секунд. Для реальных условий - слишком часто, а для демонстрации - вполне.
<script type="text/javascript"> $(document).ready(function() { getItems(); $('#nav_items').children('.nav_item').show(); $('.nav_item_name').on('click', function() { $(this).next('.nav_item').slideToggle(); }); $('#search_box_text').on('keyup', function(e) { var keyCode = e.which || e.keyCode; if(keyCode == 13) validate(); }); $('#search_box_button').on('click', validate); }); function validate() { var txt = $('#search_box_text'); var txtVal = $.trim(txt.val()); if (txtVal.length < 1 || txtVal.length > 100) { txt.css('border-color','#ff0000'); return; } txt.css('border-color','').val(''); // do something } function getItems() { var scrUrl = 'https://script.google.com/macros/s/AKfycbxx-K1GVnlifQisx0tUbFhNKqPb2bj9ns_7H83DsjkquYd15vQ/exec'; var callback = 'gotItems'; var url = scrUrl + '?prefix=' + callback; $.ajax({'url': url, 'dataType':'jsonp'}); } function gotItems(data) { console.log(data); if (!data.length) return; var i = 0; function populateJournal() { $('#journal_image').hide().attr('src', 'images/' + data[i].image).fadeIn('fast'); var jt = $('#journal_text'); jt.hide(); $('#journal_text_header').empty().text(data[i].header); $('#journal_text_copyright').empty().text(data[i].copyright); $('#journal_text_published').empty().html(data[i].published + ' <a href="' + data[i].published_href + '" target = "_blank">' + data[i].published_href_text); $('#journal_text_edited').empty().html('<span>' + data[i].edited_span + ' </span>' + data[i].edited_text); $('#journal_text_rank').empty().html('<span>' + data[i].rank_span + ' </span>' + data[i].rank_text); $('#journal_text_impact').empty().html('<span>' + data[i].impact_span + ' </span>' + data[i].impact_text); jt.fadeIn('slow'); i = (i < data.length - 1) ? i + 1 : 0; setTimeout(populateJournal, 5000); } setTimeout(populateJournal, 1); } </script>
Вуаля. Подобным образом можно решить с любым блоком полученного интерфейса.
Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации