Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ViJio - фреймворк для JS > Идея: DataSource


Автор: Sardar 21.7.2006, 14:19
Внимание:  в топе "черновая" идея "что бы не забыть", отработаная с рабочим кодом будет чуть позже.

Суть идеи в некой концепции именнованного источника данных, который снабжает инфой связанный элемент.

Например задача: сделать два и более select'а, значения которых зависят от от выбранной опции предидущего селекта (hierselect):
Код

var selects = ["select1", "select2", "select3"].map(elementById).map(DataSource.SelectConsumer); //достали существующие селекты
//SelectConsumer может заполнить элемент select любой инфой из DataSource

selects.each(function(sel, idx, prev, next) { //заполним инфой, по дефлуту селекты все пустые, ну кроме первого
   DataSource.bind(idx, sel); //связали с начальными источниками, слекты заполнились опциями
   sel.element.addEventListener("change", function() {
       if(next) DataSource.bind(this.currentOption.value, next);  //меняем содержимое следующего селекта 
   }, false);
});

//инфа из DataSource это массивы записей (records, удобно под SQL БД), поля имеют имена. SelectConsumer "знает" дефолтовые имена
//записей для селекта (нужно определить), но можно их и назначить.

Как видим вся сила в DataSource.bind, который переключает источник инфы для обьекта, при этом содержимое обьекта очищаеться. Вторым важным свойством DataSource будет то, что при добавлении новых записей все связанные элементы автоматом обновляються.

Главная цель - загружаемые аяксом таблицы с сервера, это наиболее частый вид интеракции с сервером. Таблицы не в смысле 2мерные таблицы, а что угодно приходящее как список записей с одинаковой структурой. Показать это можно как угодно. Главное здесь маштабируемость, каналов может быть сколь угодно, связали, забыли, оно само обновляеться. Используя фильтры на DataSource можно выбирать только необходимое и сортировать, при этом как на клиенте, так и на сервере (DataSource просто перезапрашивает сервер с обновлёнными требованиями). Обший back-end на сервере для DataSource может сохранять настройки сортировки и прочего в сессии/регистре пользователя, что очень удобно. Back-end на сервере не используеться для генерации данных (только XML), он просто расширяет возможности позволяя сохранять статистику, т.е. опционален.

Идея заточена под аякс, получение чистой инфы XML'ем и форматирование на клиенте. Также главное здесь интерактивное изменение (сортировки, фильтры, листание по страницам, редактирование и т.д.) вывода таблицы.

Требуеться:
  • Понять какие *Consumer нужны (для каких элементов HTML, для каких своих компонент) и как реализовывать их просто, не в полном ООП стиле с туевой хучей интефейсов (код разбухает, не удобно)
  • Реализовать модель событий для DataSource или любой другой способ пропагации приходящей/генерируемой инфы 
  • Обозначит легковесный ифейс и общие механизмы работы
  • Придумать больше примеров что бы сейчас обозначить реальные требования

Выкладываем идеи и что требуеться в этот топ smile 

Автор: vasac 21.7.2006, 14:50
Если здесь будет задействован ajax, то м.б. сначала разработать библиотеку для работы с аяксом, а потом разрабатывать те, которые будут использовать ее? 

Автор: Sardar 21.7.2006, 15:12
Нет, это просто идея, что бы также понять что потребуеться от библиотеки с аяксом. 

Автор: vasac 21.7.2006, 17:12
А есть ли реализации подобных глобальных идей? 

Автор: Sardar 21.7.2006, 17:40
Нет, этот топ и вообще этот раздел для того что бы обсудить идею и реализовать её. Пока обсуждаем, находим слабые стороны, вернее пока это черновик для меня, полное описание идеи будет позже. Библиотек реализующих такое пока не встречал, может просто не заметил smile 

Автор: 12345c 24.7.2006, 14:27
В концепции нужно предусмотреть статический вариант DataSource.bind, когда данные не предполагается менять. Тогда они могут быть включены в страницу, но объект DataSource.bind из страницы не удалён. Другой вариант DataSource.bind - многостраничный, когда данные повторяются на нескольких страницах сайта и статические или динамические. В случае статических они включаются в файл *.js. 

Автор: Sardar 24.7.2006, 15:28
Я было вообще подумал о общем механизме/спецификации, т.е. откуда данные брать не важно, массив/дерево из JS, аякс-XML или аякс-YAML, главное что их можно будет считывать потоком и управлять им. Все компоненты способные работать с DataSource смогут брать инфу не зная откуда она.

Сейчас занят админовкой, она вся из таблиц (инфа, заказы, контакты и т.д.), эти наработки будут основой для DataSource.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)