Я должен использовать GeoDjango для отображения плана размещения?

1114 Как заметил комментатор, рекурсия - это хитрость. Когда вы зацикливаете свой

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

        Редактировать:

        На основании ваших комментариев параметр по умолчанию (и, вероятно, оператор остальных (...)) вызовет проблемы с вашим браузером.

        Разветвленный JSFiddle: https://jsfiddle.net/h56zeqkg/

        Вот версия с некоторым унаследованным, дружественным к IE11 JS:

        function stringBuilder(ul, prefix) {
            prefix = prefix || '';
            var arr = [].slice.call(ul.children);
            var stringArr = arr.map(function (li) {
                if (li.children.length > 1) {
                    return stringBuilder(li.querySelector('ul'), prefix + li.querySelector('a').textContent + '/');
                } else {
                    return prefix + li.querySelector('a').textContent;
                }
            });
            return [].concat.apply([], stringArr);
        }
        
        stringBuilder(document.querySelector('ul'));
        

        [1113 ] Оригинал:

        JSFiddle: https://jsfiddle.net/hvojpds6/

        Вот фрагмент кода JS:

        function stringBuilder(ul, prefix = '') {
            return [].concat(...Array.from(ul.children).map(li => {
                // recurse
                if (li.children.length > 1) {
                    return stringBuilder(li.querySelector('ul'), prefix + li.querySelector('a').textContent + '/');
                } else {
                    return prefix + li.querySelector('a').textContent;
                }
            }))
        }
        
        stringBuilder(document.querySelector('ul'));
        

        Выходные данные из stringBuilder будет array, со следующим:

        stringBuilder(document.querySelector('ul'))
            (7) ["First", "Second/Second - 1", "Second/Second - 2", "Second/Second - 3/Aaa", "Second/Second - 3/Bbb", "Second/Second - 3/Ccc", "Third"]
            0: "First"
            1: "Second/Second - 1"
            2: "Second/Second - 2"
            3: "Second/Second - 3/Aaa"
            4: "Second/Second - 3/Bbb"
            5: "Second/Second - 3/Ccc"
            6: "Third"
            length: 7
            __proto__: Array(0)
        

6
задан Soviut 3 March 2009 в 16:52
поделиться

3 ответа

Я сказал бы, что использование GeoDjango с этой целью является определенно излишеством.

Это могло быть реализовано просто с картой изображения, или Canvas/SVG или Flash для дополнительных симпатичных точек :)

5
ответ дан 10 December 2019 в 00:45
поделиться

По моему скромному мнению, использование GeoDjango для плана размещения не является плохой идеей. Но если Ваши данные не изменяются очень, и объем данных (комнаты, области, рабочая станция...) не является очень большим, то Вам, возможно, не понадобились бы база данных и полный стек GeoDjango.

Простое решение использовало бы OpenLayers непосредственно с изображением (возможно, просканированный) план размещения как фоновый слой. OpenLayers позволяет Вам также определить регион и точки (маркеры), которые обрабатывают "мышь по" или нажимают события.

Примером использования OpenLayers для плана размещения являются Планы Office через, Открывают Layers.

4
ответ дан 10 December 2019 в 00:45
поделиться

Как часто план размещения изменится? Из Вашего описания было бы достаточно простое изображение с картой изображения.

1
ответ дан 10 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: