Просматривая статистику поискового трафика, любезно предоставленную мне , я замечаю, что основная масса трафика идет на тему . Мне не совсем понятен этот момент Обычно, когда мне что-то надо узнать по ExtJs, я двигаю на их . Потому что именно там собрана вся информация, которая вообще может пригодиться (после документации, конечно). В гугле я ищу только конкретные ошибки, которые выдает мне . Потому что поисковая система форума далека от идеала.
Но, в свете того, что я чуть подправил вектор своего блога и ориентируюсь на пользователей больше, чем раньше, я начну серию статей, посвященных ExtJS. А точнее одному удобному виджету, который может быть применен во множестве ситуаций. Речь идет о многостраничном гриде с поиском и фильтром.
Работая с ещё с ExtJS 1.1, я нашел замечательный топик, в котором рассказывалось о подобном гриде. И приводился замечательный . В этом примере всё отлично. Но он написан на первой версии и использует в качестве бэк-энда python. В этой серии туториалов я опишу создание такого же грида, с использованием ExtJS 2.0, php5 и Oracle (для MySQL будут приведены примеры запросов, не сильно отличающиеся от ораклинских).
В этой заметке я лишь опишу примерную структуру будущего виджета, а в дальнейшем приведу код с комментариями и пояснениями.
grid_data.php – файл, обслуживающий запросы к БД со стороны грида
grid.js – js-файл, содержащий основной код приложения
Архитектура будет банальной. Наш грид посредством AJAX-запросов, будет обращаться к php-файлику и тот будет передавать ему данные в формате JSON. Запросы к БД будут всего двух типов:
Запрос очередной страницы с данными
Поисковый запрос
Для простоты демонстрации, не будем сильно усложнять поиск и обойдемся LIKE. Но никто не мешает реализовать сложную поисковую логику. Просто это выходит за рамки этой серии статей. Ну а постраничная разбивка – это совсем просто (хотя на Oracle – чуть сложнее)
С тех пор, как я последний раз поднимал эту тему, прошло немного времени, однако любезный Dragonhorse отписал в комментариях ссылку на вторую версию GCalSync’а. Напомню, что это маленькая JavaMe программка, которая устанавливается на телефон и синхронизирует календарь на телефоне с Google Calendar. В качестве ее недостатка можно было выделить лёгкую «глюкавость» и невозможность синхронизировать несколько гугло-календарей.
В связи с этим я спокойно пользовался в его бесплатном исполнении. Однако, во второй версии программы, был доработан интерфейс, убрана «глюкавость» (каких-то багов ещё добавили, конечно =) и, самое главное, была реализована возможность синхронизации с двумя и более гугло-календарей.
Таким образом, не вижу смысла более пользоваться GooSync и перехожу на неё. Ещё раз спасибо, Dragonhorse.
Для обладателей Motorola A1200 (и каких-нибудь ещё), привожу рецепт по преданию программе работоспособности, потому что без рецепта телефон запрещал ей читать календарь.
.jar файл с программой
Устанавливаем программу на флешку
Подключаем телефон к компу и ищем на флешке файл .system/java/DownloadApps/MIDletxxx/registry.txt
Меняем Domain: untrusted на Domain: Manufacturer
Меняем Is-Trusted: 0 на Is-Trusted: 1
Меняем DRM-Mode: Forbidden на DRM-Mode: Allowed
После этих манипуляций, телефон начнет доверять программе и они подружатся. А мы получим двухстороннюю синхронизацию мобильного телефона и google calendar. Что не может не радовать =)
С тех пор, как я прочел книгу ««, прошло уже достаточно времени. Я прикипел к со всеми его фишечками и прикрученным календарем, поэтому на другие GTD-системы я смотрю, сравнивая их с тем, что есть в ThinkingRock. Единственное, с чем я не до конца определился — это хранилище информации.
Дэвид Аллен рекомендует использовать шкаф с папками. Создавать по папке на каждую тему, упорядочить их по алфавиту и хранить в шкафу. В такой системе меня не устраивает пара моментов:
Громоздкость
«Оффлайновость»
В силу того, что большая часть моей работы проходит через комп, и большая часть информации идет в цифровом виде, мне необходимо цифровое хранилище информации. Блуждая по зарубежным ресурсам (тут можно привести длинный список), я наткнулся на очередное на тему «Моё ГТД», в котором упоминается макосовский софт , который я попробовать не смог в силу его макосОвости и небесплтатности. Но судя по заверениям создателей и личным впечатлениям автора эссе (а он, судя по всему, завсегдатай известного макОсно-ГТДшного блога , т.е. ему верить можно софт достойный.
Убедившись в очередной раз, что надо либо ставить MacOSX на PC (фи), либо покупать Mac (о, да), и поняв, что отдавать деньги в очередной раз не хочется, я решил подумать ещё раз =)
Вторая дума (по мотивам того же эссе) занесла меня на . Опять же, основываясь на заверениях автора эссе и создателей сервиса, пришел к мысли, что сервис хороший. Только, он платный. Точнее есть бесплатный вариант, но настолько урезанный, что способен только заманить на платный аккаунт. А жить на нем невозможно. Это понимаешь только после бесплатной регистрации. Но попробовать его стоит. Может кому сильно понравится, и он останется там жить
После нескольких часов поиска, я вспомнил про , который я использовал как временное пристанище для ссылок и периодический источник полезных линков. И его тэги показались мне вполне удачной идеей.
Не мудрствуя лукаво, я решил сотворить из него information storage для он-лайн статей. Есть, конечно, вероятность, что статьи канут в лету, но кэш гугла останется с нами. И, имея нормальное название статьи и линк на неё, можно у гугла будет попросить показать последнее, что он об этой странице запомнил
Помня, что лучший «упорядочиватель» — это время, я решил не слишком углубляться в создание сложной структуры тэгов. Я пробежался по всем закладкам, благо их было около сотни, стер те, что были устаревшими или более не полезными, и «заТэгил» те, что остались. В процессе «тэганья», я выделил несколько основных направлений, по которым я буду (предположительно) складировать информацию и вывел их наверх (@development, @nix и пр.). Далее, я создал пару тэгов ещё повыше (@@print – распечатать и @@parse – изучить). Оглядев сложившуюся систему, я поудалял тэги, в которых было по одной записи, сократив их число ещё чуть. Таким образом, получилась довольно стройная система. Разумеется, она будет изменяться. Возможно будут появляться новые верхнеУровневые тэги.
Результатом я остался доволен. По-крайней мере часть хранилища у меня есть. Если найду более универсальный способ – обязательно расскажу
Что касается хранилища оффЛайн-информации, то в субботу поеду за папками и файлами и наклейками =) Посмотрим, что из этого получится. Главное купить побольше, чтобы можно было беспроблемно выкидывать
К программке thinkingRock я уже привязался, и привык запускать её каждое утро, чтобы сориентироваться «на местности». И периодически запускать в течение дня, чтобы понять правильно ли я двигаюсь
Но моя радость была бы не полной, если бы программка не позволяла делать отчеты, которые можно печатать на бумаге. И носить с собой. Учитывая стоимость одного листа бумаги, даже с тонером, можно предположить, что решение довольно оправдано. Но самым неожиданным для меня было то, что программка умеет делать . Т.е. маленькие такие книжечки. Которые удобно таскать с собой. Правда настройка не очень тонкая, но жить можно. Всё самое важно можно вытащить.
Для тех, кого решительно не устраивает половинчатый подход к делу, есть ещё одна возможность. Помимо pocketMod, программа позволяет создавать отчеты в PDF. На листах формата A4. Здесь уже возможностей настройки больше. Но таскать с собой A4 не с руки. Можно было бы напечатать их по 4-8 на листе, резать, клеить. Но это уже не 2 минуты =) Здесь нас выручит программка , которая умеет создавать pocketMod-блокнотики из любого документа. Лишь бы страниц было много. Правда она в альфа-версии и вообще. Но она работает А больше и не надо
В первой части этой серии статей, посвященных поиску инструментов для внедрения GTD я рассказал про замечательную программу . До сих пор я в ней не разочаровался и пока всё идет по плану .
В этой части я расскажу о синхронизации ThinkingRock с Google Calendar. Для создания этой связки есть две причины:
Доступ запланированным мероприятиям из любой точки при наличии интернета
Удобная синхронизация с мобильным телефоном (об этом в следующей части)
Для осуществления синхронизации, я буду использовать следующие программы:
(в качестве альтернативы м.б. использован ThunderBird с plug-in’ом, Evolution, Rainlendar и вообще любые календари, которые воспринимают формат .ics)
– программа-демон, осуществляющая синхронизацию
Сам Google Calendar =)
Настраиваем ThinkingRock
Предположим, что вы начали использовать ThinkingRock (или начнете =). Одной из его опций является ведение файла в формате .ics, в который он пишет все запланированные события и ToDo-лист. Для включения этой опции надо прогуляться в меню «Tools->Options», далее на вкладку «Miscellaneous», где открыть пункт «Calendar» и поставить там «галочку» «Publish iCalendar file». Далее необходимо задать путь до папки, где ThinkingRock будет держать наш файл. Если ThinkingRock установлен на флешке, то и файл с календарем стоит держать там же.
Как вы помните ThinkingRock кроссплатформенное приложение, написанное на Java. И из одной копии может грузиться и под *nix и под Win, и настройки у него для ОС разные. Поэтому если вы работаете и там, и там, необходимо будет проделать вышеописанную процедуру два раза. Из-под Win и из-под *nix. Ну или, для эстетов, из-под MacOSX =)
Теперь в указанном месте у нас будет жить файлик gtd.ics, который ThinkingRock будет обновлять по мере сохранения или изменения событий.
Настраиваем календарь
Я буду приводить пример настройки SunBird, но ту же процедуру можно выполнить в любом календаре, способном подхватывать ics-файлы.
Открываем SunBird, открываем «Файл->Подписаться на удаленный календарь…» В открывшемся мастере выбираем «В сети» (Далее) «Формате iCalendar» и в качестве адреса прописываем путь к нашему файлу «file:///E:/thinkingRock/gtd.ics» В результате наших манипуляций, должен подгрузиться новый календарь.
Надо заметить, что ThinkingRock’у абсолютно фиолетово что там происходит с файлом. Он просто его переписывает. Поэтому, если вы внесли правки в календарь на стороне SunBird, при следующем акте сохранения ThinkingRock, это изменения будут удалены. Это в принципе и неплохо. Мне больше нравятся централизованные инструменты.
Достаем клей
Теперь надо приклеить нашу связку к Google Calendar. Для этого для нужной нам платформы. Он тоже на Java и тоже ацке кроссплатформенный =) Теперь, в принципе, можно прекращать читать нудный текст, а двигать на и осваивать там процесс установки в картинках.
Когда зарябит в глазах от всевозможностей этой программы и она заработала у вас как демон (служба Win) или просто заработала (хотя демон предпочтительней), можно обратиться к настройкам. Путем длительных махинаций с конфигурацией и календариками, было выяснено, что удобнее всего выставлять (пример, правда для Rainlendar, но смысл от этого не меняется) и начинать считать, что у нас модем (file.offline.enabled=true). Тогда GCalDaemon работает практически безошибочно и не перетирает гуглом локальный файл в случае изменения. Все настройки удобнее всего править через Config Editor.
Практически в день публикации предыдущей записи про инструменты GTD, на просторах зарубежного (австралийского интернета была обнаружена любопытная программа, названная своими создателями . В вольно-дословном переводе название это означает «Камень для размышлений». На мой взгляд очень удачная метафора, да и на splash-скрине присутствует размышляющий человечек.
Если вы читали предыдущий пост, то вы помните, что я всячески открещивался от «настольного» приложения, утверждая, что оно не способно предоставить достаточно свободы. Мнения своего я не изменил. Просто начал использовать ThinkinRock =). На что есть несколько очень весомых причин.
Во-первых, это Java-приложение. Т.е. оно кроссплатформенное и свободно работает под Win, Lin, Mac. И как работает! В папке с бинарниками лежат .sh и .exe, которые запускаются в соответствующих ОС. Уникальный portable, короче. Единый файл с данными, разные файлы с настройками. Вообщем, всё продумано очень здорово.
Во-вторых, это труЪ GTD приложение. Т.е. без излишеств. Сам «процесс» GTD идентичен описанному в книге. Собираем мысли в инбокс, потом прорабатываем используя привычную «схему» (картинку найти быстро не смог, те, кто «в теме» меня поймут Т.е. никаких напильников и никаких отвлекающих возможностей.
В-третьих, есть документация. И примеры. И рецепты. А для тех, кому не хватило, есть форум, на котором общаются единомышленники
В-четвертых, это опенСорс. Весомый пункт =)
С положительными моментами, пожалуй всё. Теперь переходим к отрицательным. Единственным недостатком, на мой взгляд, является мобильной версии программы. Хотя, на форуме уже разработали , я со своим *nix на мотороле в пролете Мне удалось синхронизировать календарные задания с телефоном, но для actions нужна программка.
Надежду внушает то, что приложение написано на Java и теоретически перенести его будет не дйавольски сложно, да и разработчики обещали включить это в свой RoadMap. Но пока мобильного клиента нет.
Для меня данный софт оказался подходящим по причине того, что комп – мой рабочий инструмент и я практически всегда либо с ноутом, либо за рабочей станцией. А флешка – она не тяжелая. Вообщем, если вы не евангелист веб20 и работаете за компом, попробуйте эту программку, может она поможет вам «привести дела в порядок».
П.С. Это первая из двух частей про «серебряные пули» GTD. Во второй я расскажу, как устроить хитрую синхронизацию ThinkingRock с GoogleCalendar. Ну а про синхронизацию гуглоКалендаря с мобильным телефоном я уже писал. Могу лишь добавить, что программка , упомянутая мной, не без глюков. Хотя и позволяет синхронизировать на неограниченное время вперед и назад (у goosync только 30 дней вперед).
Тихо и незаметно прошел месяц с того дня, как я сделал первую заметку по Ubuntu 7.10. Поставил я его чуть раньше, но это «жить» в нем начал примерно тогда же.
В принципе, за весь месяц, Ubuntu ни разу не падал =) мне не приходилось сидеть в неГрафической консоли, мне не приходилось сидеть часами что-то обрабатывать напильником для возвращения работоспособности. Может это связано с большой загруженностью, может с моей нетребовательностью, как пользователя, но можно считать, что Ubuntu обжить мне удалось =).
Я не стремлюсь к тому, чтобы стать «джедаем» и повелителем консоли. Я не использую в работе vi или emacs, просто потому, что привык к несколько другим интерфейсам и не обладаю достаточным запасом свободного времени, да и желания тоже. «Может быть, когда-нибудь» мне откроется истина, я отращу бороду и буду воспринимать gnome, как «бесполезную и ресурсоемкую надстройку над консолью» =)
Одной из причин моего перехода под *nix, стало желание, как бы это выразиться, жить честно =) Т.е. не воровать софт. И здесь я выполняю план на все сто. Да, на машине стоят проприетарные кодеки, Adobe Acrobat Reader, Skype и другие неСвободные программы. Но меня это волнует мало. Эти программы я использую с «дозволения» их создателей, следовательно они в курсе, следовательно всё с моей совестью в порядке. Я понимаю, что это странная причина =) но мне, в какой-то момент времени просто стало «западло» использовать ворованный софт.
Конечно, всё далеко не безоблачно. Конечно, Ubuntu нельзя назвать дружественным-на-все-сто-любому. Но для человека, который в состоянии читать мануалы, в курсе где живет гугл, знает, что можно задать вопрос на форуме (убедившись, что тема не поднималась), Ubuntu будет доступен. Для человека, который признает, что всегда есть несколько способов решения проблем (а не только «чтобы-эксель-как-в-вЕнде») и который ищет решения проблемы, а не «привычные способы» Ubuntu будет хорошим источником таких решений.
В конце-концов, кого нам винить за то, что мы только недавно начали просыпаться по поводу Open Source (только не кидайте в меня дисками с первой слакой я тоже, помню, редХат 9 ставил =), что этот вопрос начал подниматься в сфере образования только перед «вступлением в ВТО». Но начал же, и активно. А это значит, что не только *nix идет к нам с лозунгом «год линукс на рабочих столах», но и мы должны двигаться по направлению к свободе. И чем больше пользователей переходить на *nix, тем лучше он будет становиться. Главное, чтобы пользователь понял, что он МОЖЕТ принимать участи в улучшении того, чем пользуется, а не просто сидеть, смотреть на ошибку и проклинать разработчика (кто-нибудь отправлял в майкроСофт сообщения об ошибках?
В последнее время я активно интересуюсь таймМанагерством. Хотя, как замечают некоторые люди, правильнее это называть делоМанагерством, так как временем управлять невозможно. Оно течет себе вперед с постоянной скоростью. И управлять мы можем лишь его наполнением.
вот с наполнением у меня как раз проблемы. Я ленив, неорганизован и ведение трех рабочих проектов и бесконечные рутинные дела часто соревнуются за место в моем мозге, заставляя меня забывать друг друга. И это служит для меня источником раздражения и фрустрации
Первым, что я прочел была книга , которая в простой и доступной форме излагала простые и доступные идеи. Хорошая книга, для погружения в предмет. И шаги там приводятся правильные и мысли высказываются хорошие. Всё отлично. Но чего-то мне в ней не хватило для начала совершенствования =) Может стимула там не было заложено.
Второй книгой была . Его методика, известная так же, как Getting Things Done (GTD), довольно известна и популярна в мире. Она породила целый пласт таймМенеджерского сообщества. Эта книга зацепила меня поболе «Тайм Драйва», не смотря на огрехи в переводе.
Третья книга, которую я ещё не дочитал, написал Стивен Кови, называется она . Пока не дочитаю, сказать ничего не могу. Но уже ясно, что она ближе к «Тайм Драйву».
Вообще-то, насколько я пока могу судить =), у таймМенеджмента есть два подхода:
Разобраться с мелкими делами, чтобы посмотреть на свою жизнь свысока и всё понять
Посмотреть на свою жизнь свысока, всё понять и разобраться с понятными мелкими делами
К первой категории можно отнести GTD, ко второй книги Архангельсокого и Кови. Мне первый подход импонирует больше. Вообще, стоит заметить, что таймМенеджмент штука очень личная. Каждый должен пропустить системы через себя и выбрать то, что подходит ему. Поэтому в нем не должно быть «рецептов», а должны быть методологии. Поэтому к выбору инструментов надо относиться с точки зрения личных предпочтений, а не потому что кто-то посоветовал. Чем более персональной будет система, тем эффективнее она будет работать.
Проникшись высказанной мыслью =) я начал поиск инструмента под себя. И обнаружил их, к счастью, или, к сожалению, . Сегодня я буду рассуждать об инструментах, имеющих отношение к GTD.
Перво-наперво, займемся классификацией. Инструменты бывают трех типов:
Настольные приложения, которые живут в ноутбуке и все.
Веб-приложения, которые живут в сети
Бумажно-писательные, которые живут в блокнотах =)
Настольные приложения часто можно таскать с собой на флешке. А веб-приложения редко, но имеют клиентов для синхронизации со смартфонами и КПК. Еще одна неприятная деталь заключается в том, что настольные приложения сплошь и рядом написаны под Windows. Так же как и смартфоновские приложения сплошь и рядом пишутсья под Windows CE, реже под Palm и BlackBerry. Иногда вспоминают про Symbian. Я, конечно, этот вопрос не прорабатывал до конца, но картина вырисовывается именно такая.
Не так давно, я писал про интеграцию RememberTheMilk с телефоном. В принципе это выход. Но не достаточно гибкий. Так как списков дел под рукой нет. В принципе можно всегда зайти на мобильную версию , но это не совсем то, что нужно. rMilk хорош, удобен, но он не поддерживает GTD в естественном виде.
В свете того, что настольные приложения меня интересуют мало, ибо *nix и Motorola A1200, я устрою здесь небольшой смотр web-приложений, которые предлагаются в большом количестве. Далеко не все я попробовал, ещё больше я пробовать не буду, но список может оказаться кому-то полезным.
Одним из последних тестированных приложений была . Сэнди – это персональный напоминатель. Работает до смешного просто. Вы отсылаете на специальный e-mail сообщение, а Сэнди их сортирует, запоминает и высылает уведомления, если что-то надо сделать. Короче, это банальная календарная система с напоминаниями. GTD представлено слабо и возможны лишь банальные toDo-листы. Вычеркнул.
Речь идет о . Сервис для «распиливания слонов на бифштексы. Одной из причин отказа от него для меня было то, что он не обновлялся с октября 2006 года. Сервис, в принципе хорош, но он тоже насквозь календарный, зато предоставляет API для использования себя в сторонних приложениях. Если есть желание повозиться с напильником, то можно посмотреть в его сторону и заточить его под себя. Может получиться неплохо. Больше API я нигде не видел. Вычеркнул.
Не слишком изобретательное название =) Это уже не сервис, а приложение, которое нужно разворачивать, имея в наличии веб-сервер и базу данных. Не стал бы его упомянать, но он он натолкнул натолкнул меня натолкнул меня на целый класс приложений, называемых . Т.е. полноценный сервер на флешке. Правда опять под Windows. Записав про сервер на флешке, вычеркиваю.
Пока неохваченные
Здесь соберу ссылки на пока непросмотренные приложения. А эту запись буду править по мере разбора
– Надстройка над Gmail
Это всё веб-приложения, заточенные под GTD. Из общего числа выбивается только GTDInbox, ибо он является add-on’ом к Firefox и изменяет поведение .
Однофайловые приложения
Ещё один полукласс приложений. Они написаны с использованием JS, основаны на и живут на флешке или просто в файловой системе. Их, наверное, тоже много но два самых часто упомянаемых это и . Тоже, в принципе, вариант, но они ничем не лучше настольных приложений. Вообщем, пока не мой выбор
Бумажные версии
Ввиду того, что я не пока не планирую их использовать, приведу здесь только ссылки на проекты.
Их, конечно, больше, а это те, которые у меня осели. Да, ещё надо обязательно купить стильную записную книжку , т.к. это сильно повысит эстетичность процесса
Не так давно я рассказывал о библиотеке , ей же будет посвящена сегодняшняя заметка. Эта заметка расчитана на подготовленного читателя, который уже разобрался с базовыми понятиями. Но и новичку будет полезно взглянуть на то, что предлагает эта библиотека, возможно захочется стать подготовленным =) Комментарии будут подробными.
Стоит заметить, что речь пойдет о второй версии, которая сейчас значиться Release Candidate 1 и доступна для скачивания по
Сегодня речь пойдет об Ext.data.Store. Объект удачный и используется во множестве виджетов в качестве источника данных. Обычный подход заключается в том, чтобы создать подгружающий себя объект и вызывать метод load(), для его загрузки.
//Инициализируем соединение
var rCon = new Ext.data.Connection({
//Урл "кормящего" файла =)
url: '/data.php',
//Метод
method: 'POST',
//Параметры, которые передадутся в запросе
extraParams: {'act' : 'get_requests'}
});
//Само хранилище
var rDs = new Ext.data.Store({
//Прокси с соединением, созданным выше
proxy: new Ext.data.HttpProxy(rCon),
//"Читатель" ответов, приходящих в формате JSON
reader: new Ext.data.JsonReader({
//Какое свойство читать
root: 'requests',
//Какое свойство отвечает за кол-во записей
totalProperty: 'total_requests',
//Поля записей
fields: [
'requests_key',
'requests_name'
]
})
});
rDs.load();
Так выглядит обычное создание и загрузка хранилища. При вызове метода load() идет асинхронных запрос к серверу, получаются данные и далее с ними делается то, что нужно. Вcё замечательно. Есть одно «но». Хранилище в силу своей универсальности используется и для ComboBox – выпадающих списков в формах. А этих самых ComboBox в одной форме может быть много. У меня, например 19 =) Таким образом, реализуя приведенную выше схему, мы получим 19 асинхронных вызовов. А это не очень хорошо.
Известно, что у браузеров есть ограничение на количество одновременных вызовов. Благодаря комментариям, мы знаем, что это 3 для FF и 2 для IE. И мы получаем сильное снижение производительности. Это если не брать в расчет проблемы с обработкой 19 вызовов, и синхронизации загрузки с отображением. Ведь если не успеют загрузиться хранилища, а мы уже начнем показывать форму, будет не очень красиво.
Продумав это всё в голове, я пришел к выводу, что надо действовать по-другому. Надо наполнить все 19 хранилищ за один запрос. Поиски на форуме не привели к нахождению решения. Хотя пару идей я получил. В рецепте, приведенном ниже будет использован метод loadData(), вместо load(). Который просто загружает уже пришедшие данные в хранилище, никуда не обращаясь. Я не буду приводить код для 19 хранилищ, приведу для двух.
//Создаем record. Пригодится для "читателя" хранилища.
dsDataRecord = new Ext.data.Record.create([
//Пишем название свойства и мапим его
//на второй элемент массива пришедших данных
{name : 'data_key', mapping : 1},
{name : 'data_name', mapping: 2}
]);
//Хранилище номер раз.
dataStore = new Ext.data.Store({
//Читатель на этот раз “массивный” а не JSON =)
reader: new Ext.data.ArrayReader({
//Первый элемент массива для упорядочивания. Он уникальный.
id: 0
//Наш record.
}, dsDataRecord)
});
//Создаем record. Пригодится для “читателя” хранилища.
dsDigitRecord = new Ext.data.Record.create([
//Пишем название свойства и мапим его
//на второй элемент массива пришедших данных
{name : 'digit_key', mapping : 1},
{name : 'digit_name', mapping : 2}
]);
//Хранилище номер два.
digitStore = new Ext.data.Store({
//Читатель на этот раз “массивный” а не JSON =)
reader: new Ext.data.ArrayReader({
//Первый элемент массива для упорядочивания. Он уникальный.
id: 0
//Наш record.
}, dsDigitRecord)
});
//AJAX-запрос на все данные
comboStoreRequest = Ext.Ajax.request({
//Урл “кормящего файла”
url: ‘data.php’,
//В случае успешного запроса
success: function(result){
//Преобразуем JSON-ответ в объект
comboStore = Ext.util.JSON.decode(result.responseText);
//Загрузим массив данных первое хранилище
dataStore.loadData(comboStore.data);
//Загрузим массив данных во второе хранилище
digitStore.loadData(comboStore.digit);
},
//Метод
method: ‘POST’,
//Параметры вызова
params: {act : ‘get_data’}
});
Приведенный код тоже не слишком сложен. Самое интересное, для меня, было сформировать теперь выдачу с сервера JSON-данных, чтобы их «прожевал» ArrayReader. И сделал из них массивы, приемлемые для загрузки в хранилище.
На основе документации, можно прийти к выводу, что ArrayReader ожидает данные в виде объектов вида:
Первый пункт выполнен. Этими данными вполне можно «накормить» один ArrayReader. А у нас их два. А ответ от сервера один. Значит надо наши массивы упаковать как свойства объекта. И обращаться к ним при загрузке в хранилище. Для этого на сервере нужен следующий PHP-код:
Готово. Теперь мы передаем JSON-объект с двумя свойствами, которые являются массивами данных. И мы можем загрузить их в наши dataStore. Задача выполнена =)
Не помню, писал ли я или нет, но в последнее время я плотно использую javascript библиотеку . Для начала опробовал её для административной панели небольшого проекта, когда ExtJs была ещё версии 1.x. Потом применял её виджеты в frontEnd проектов покрупнее, тоже в версии 1.x. Теперь перешел на ExtJS 2.0RC1 в основном проекте. И с нетерпением жду релиза второй версии.
Если говорить о возможностях, предоставляемых библиотекой, то они всеобъемлющи. Если начать перечислять по памяти то, что я использую сам то получиться так:
AJAX, интегрированный на всех уровнях, контроллируемый с небывалой легкостью.
(продвинутые таблички) для данных разных модификаций и видов
с возможностями drag’n’drop и lazyLoad (загрузка только необходимых узлов с помощью AJAX)
Всевозможные для построения как отдельных кусков страниц, так и целых приложений
с валидацией на стороне клиента, в которые можно и подгружать данные (AJAX) и сохранять асинхронно (опять AJAX
Это лишь малая часть того, что может и умеет библиотека, на можно всё разглядеть поподробнее. И приступать к обучению
У библиотеки достаточно крутая кривая изучения, но она оправдывает себя в полной мере. На русском языке я знаю три ресурса, которые уделяют ей внимание это:
— наиболее объемный источник информации
— один из первых сайтов по тематике на русском языке, к сожалению, редко пополняется. В последнее время это статьи из…
— блог, посвященного веб-разработке во многих её ипостасях. Довольно интересные материалы, рекомендую.
Может быть я что-то упустил, но гугл до сих пор считает, что я искал и всё остальное — это единичные статьи и захабренные/бобренные сссылки.
Самым главным источником информации по ExtJs можно считать , который, естественно, англоязычный (хотя иногда встречаются китайские треды и русский код . Атмосфера на форуме очень хорошая, объясняют очень понятно, код приводят и вообще замечательное сообщество в плане помощи в обучении.
Помимо форума, на том же можно найти раздел с , из которых можно получить базовые знания. К сожалению, в свете выхода новой версии ExtJs, много информации потеряло актуальность.
Ну а самым продвинутым и полным источником можно считать . Там есть всё, иногда даже примеры реализации =) Она всегда должна быть под рукой во время разработки. Слишком уж много методов и свойств у каждого из объектов ExtJs.
Что касается лицензии, то ExtJs придерживается достаточно распространенной в последнее время двойной политики лицензирования. Есть вариант и есть , сопровождаемая поддержкой и прочими благами в обмен на деньги =) Выбор — это всегда приятно.