Не отпускает тема 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>
Вуаля. Подобным образом можно решить с любым блоком полученного интерфейса.


Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации