Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2014-01-06

Евангелист

Недавно где-то я слышал историю про одного незаменимого специалиста, программиста, который очень быстро осваивал всякие новые технологии. Типа, не успели еще толком раскрутить, например, некий фреймворк, а он на нем уже что-то делает. Видимо этим и был ценен. Проходит месяц, другой, этот парень уже на новом проекте, а то, что он наваял — допиливают типа простые смертные.

Ну слышал, ну и что? А дело в том, что на днях я закончил (не то чтобы закончил, но, во всяком случае, то что должно работать — работает) вот такое допиливание, а если точнее — почти полную переделку проекта feature-service-editor-js, накаляканного вот таким вот специалистом. Познакомься, Алиса, это Пудинг Andy Gup (https://github.com/andygup). Та версия, что он опубликовал в репозитории Esri просто не работает. После третьего клика по функциональным кнопкам начинаются чудеса, обычные для программы полной багов. Чтобы от этих багов избавиться, пришлось процентов 30 кода переписать заново, потратив более трех недель времени на отладку. К сожалению, ключевую концепцию дизайна программы (ошибочную и даже вредную) так просто не переделаешь. И этот Энди работает «Developer Evangelist for Esri»! Упаси бог от таких евангелистов.

Короче, если вам вдруг нужно приделать к карте таблицу, в которой можно еще и редактировать данные Feature Layer, то берите таблицу у меня (https://github.com/vasnake/feature-service-editor-js) или делайте сами, благо это не так трудно как кажется.
Но ни в коем разе не пытайтесь использовать это угробище: https://github.com/Esri/feature-service-editor-js

Собственно, пост этот я хотел посвятить немного другому, но увлекся нытьем, простите грешного.
Я хотел показать, ибо народ часто спрашивает а ответа не находит, как обновлять/reload/reset/rebuild/recreate таблицу dojo/dgrid.
Обычно советуют сбросить коллекцию полей и подключить новый storage. Это все сложно. Показываю как проще (три куска кода из рабочего проекта):
    // destroy grid
// освободить хандлеры событий
    if(featureEditor.dgridRowClickListener != null) featureEditor.dgridRowClickListener.remove();
    if(featureEditor.dgridCellDblClickListener != null) featureEditor.dgridCellDblClickListener.remove();
    featureEditor.dgridRowClickListener = null;
    featureEditor.dgridCellDblClickListener = null;

// грохнуть грид. Пичалька, но тут пропадает DOM элемент, поэтому приходится его пересоздавать
    if(featureEditor.grid) {
        featureEditor.loadingIcon.destroy();
        featureEditor.grid.revert();
        featureEditor.grid.destroy();
        featureEditor.grid = null;
        dojo.place('<div id="grid" class="grid1"></div>', 'grid-legend-parent', 'before');
    }
...

// когда надо, создаем грид
    featureEditor.store = new Memory({
        data:       [],
        idProperty: fields[0].field // OBJECTID probably
    });

    // Dojo's dGrid
    var DataGrid = declare([OnDemandGrid, Selection, CellSelection, Keyboard]);
    featureEditor.grid = new DataGrid({
        store:          featureEditor.store,
        columns:        fields,
        selectionMode:  'single'    /*, noDataMessage:'Nothing found.' */
    }, 'grid');
    featureEditor.grid.startup();
    featureEditor.utils._setListeners();
...
// и когда надо, обновляем данные в гриде
    featureEditor.grid.set("store", featureEditor.store);
    featureEditor.grid.refresh();
Этот фокус прекрасно работает в моем варианте https://github.com/vasnake/feature-service-editor-js

Вот как-то так.



original post http://vasnake.blogspot.com/2013/12/blog-post_19.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)