2011-07-29 2 views
9

У меня есть набор данных, который лучше всего представлен графиком. Он состоит из узлов из 6 или 7 разных «типов» с направленными ребрами (зависимости друг от друга, гарантированные не имеющие циклических зависимостей). Набор данных по существу является шаблоном многоуровневой конфигурации, и пользователь должен иметь возможность выбирать биты и части конфигурации из разных желаемых слоев и автоматически вводить зависимые биты.Javascript направлена ​​на ациклическую библиотеку графов? (Графическая визуализация НЕ необходима)

Общая потребность в пользовательском интерфейсе заключается в том, чтобы пользователь мог выбирать или отбирать элементы из блоков множественного выбора (один из таких полей для каждого типа узлов), а элементы «зависимые» в других ячейках становятся выбранными или невыделенными по мере необходимости. Мне нужно иметь возможность вытащить набор данных с сервера, позволить пользователю выбирать нужные биты (с обработкой зависимости, выполняемой в javascript на стороне клиента для обеспечения отзывчивости), а затем отправить результат обратно, когда они будут завершены.

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

Я нашел здесь ссылки на несколько библиотек визуализации графиков javascript, но большинство из этих обсуждений, похоже, график "как" диаграмма ", и я не нуждаюсь в графике здесь. Мое копание привело меня в этот список: Рафаэль, протовиз, вспышка, D3, jsVis, Дракула и префузирование. Из этого списка похоже, что jsVis или Dracula могут иметь базовые конструкции графиков, которые мне нужны, если я просто игнорирую визуализацию, но мне не ясно, из документации, если это так. Я должен исключить несколько других, потому что я не могу привносить какие-либо флэш-зависимости. К сожалению, у меня нет времени, чтобы прототип вещей с этими многочисленными библиотеками. (Я буду копать в jsVis и dracula, хотя, если не использовать какой-нибудь удобный ввод здесь.)

Если у кого-то есть опыт с чем-то из этого списка и считается, что его часть может использоваться независимо от части визуализации, это безусловно, удовлетворит мои потребности. Если есть какая-то другая библиотека, которую я мог бы использовать, которая бы соответствовала моим потребностям, это тоже было бы здорово. Одно из последних требований в отношении лицензирования: библиотека должна быть «бесплатной» не-copyleft-способом - так идеально Apache v2.0, BSD, MIT или что-то в этом роде.

+1

Вы в конечном итоге внедрили собственное решение? Если да, то он доступен в любом месте? – steeveeet

ответ

7

Я не использовал его, но вы можете проверить data.js. Это лицензионная библиотека MIT с набором утилит для структуры данных. В частности, он включает в себя Data.Node и Data.Graph:

Data.Graph может использоваться для представления произвольных комплексных графов объектов. Отношения между объектами выражаются через ссылки, указывающие на упомянутые объекты. Data.Graphs можно перемещать по-разному.

+0

Спасибо, я потратил некоторое время этим утром, чтобы просмотреть это, и я не уверен, что он действительно сделает то, что мне нужно. Это очень легко документирует, и в этом примере я хочу, чтобы я запускал CouchDB и node.js. Поскольку все, что мне действительно нужно, - это простой обход дерева. Я думаю, что я мог бы свернуть сам, но если я действительно использую data.js, я вернусь и помету это как ответ. –

Смежные вопросы