Разбор объектов внутри объекта, чтобы получить массив определенного свойства? - PullRequest
0 голосов
/ 16 сентября 2011

Я использую чекбоксы jQuery Dynatree для фильтрации маркеров по дате на карте Google здесь: http://crocdoc.ifas.ufl.edu/projects/chameleonmapdev/

Флажки для определенных дат работают просто отлично, но у меня возникают проблемы с поиском того, как лучше всего сделать, чтобы флажки месяца отображали / скрывали все соответствующие маркеры. Я надеялся на какое-то событие onChange, которое я мог бы прикрепить к флажкам даты (так как они отмечены / не отмечены, если установлен родительский флажок), но я не могу найти ничего подобного в документации ( http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html#h5.1), поэтому я использую функцию onSelect, хотя она не будет автоматически ориентироваться на даты, если выбран родительский месяц. Я хотел бы получить массив ключей всех детей, если папка отмечена / не отмечена. Пока что я могу получить объект, описывающий все дочерние элементы, но я не уверен, как его проанализировать, поскольку ключи находятся в объектах внутри этого объекта.

      onSelect: function(select, node) {
        console.log('isFolder: '+node.data.isFolder);
        if (node.data.isFolder === true) {
            console.log(node.data.children);
                //Parse node.data.children to get array of child keys

        } else {

            if (select === false) {
                for (g in marker_container[node.data.key]) {
                    marker_container[node.data.key][g].setMap(null);
                }
            }
            if (select === true ) {
                for (g in marker_container[node.data.key]) {
                    marker_container[node.data.key][g].setMap(map);
                }   

            }

        }
      }

node.data.children возвращает:

 [Object { title="July 12, 2011", select=true, key="July1211"}, Object { title="July 14, 2011", select=true, key="July1411"}, Object { title="July 26, 2011", select=true, key="July2611"}, Object { title="July 27, 2011", select=true, key="July2711"}, Object { title="July 28, 2011", select=true, key="July2811"}]

Любые советы приветствуются. И я очень открыт для любых предложений о том, как улучшить этот код в целом.

1 Ответ

0 голосов
/ 16 сентября 2011

Парсинг не совсем правильный термин здесь. В журнале вы видите строку, описывающую объект, но анализировать ее не нужно. Скобки [ и ], заключающие объекты, разделенные запятыми, указывают, что node.data.children - это массив, содержащий дочерние объекты. Каждый объект имеет свойство с именем «ключ», которое вы можете получить, перебирая массив таким образом:

if (node.data.isFolder === true) {
    var keys = [];
    for (var i = 0; i<node.data.children.length; i++){
        keys[i] = node.data.children[i].key;
    }
}
...