2013-03-08 14 views
5

Próbuję użyć hierarchii drzewa w D3 i utknąłem. Myślałem, że mam prawidłowo budowania JSON, ale gdy spojrzał na obiekcie w narzędzie programisty, widzę następujące:Długość tablicy w obiekcie nie pasuje

chrome http://s10.postimage.org/yo3yshmax/chrome.png

Wskazówka pierwsza linia pokazuje tablica utrzymaniu ma 0 Długość ale gdy rozszerzony, ty może wyraźnie zobaczyć, że osoby na utrzymaniu mają 3 obiekty. Kiedy go skrętuję, otrzymuję:

{"attributes":{"id":0,"name":"root"},"dependents":[]} 

Każdy pomysł, co może być nie tak? Dzięki!

+0

Nic nie jest źle. Reprezentują widok obiektu w różnych momentach. Ta ostatnia jest prawdopodobnie późniejsza. Ten widok nie ma wpływu na Twój kod. –

+0

... innymi słowy, prawdopodobnie budujesz go poprawnie. Po prostu nie polegaj zbyt mocno na reprezentacjach w narzędziach programistycznych. –

Odpowiedz

6

Ten problem zwykle występuje po zmianie obiektu po jego zalogowaniu, ponieważ Chrome nie kopiuje głęboko obiektu podczas jego rejestrowania, ale po prostu zapisuje odniesienie.

Drzewo nie jest od razu budowane, ale tylko w razie potrzeby, a czasami jest oparte na nowszej wartości.

Jeśli obiekt jest na tyle lekki, można go sklonować siebie, czy naprawdę chcesz zobaczyć wartość w czasie rejestrowania:

console.log(JSON.parse(JSON.stringify(myobject))); 

Jeśli obiekt jest duży lub rekurencyjne, może się okazać, że trochę więcej trudne do sklonowania. Osobiście mam własne narzędzie, JSON.prune.log.

Jak ignorowanie optymalizacji w przeglądarce przychodzi z pewnym kosztem, należy najczęściej po prostu wziąć pod uwagę to zachowanie i rejestrować tylko prymitywny, jeśli chcesz mieć pewność, że ich wartość czasu rejestrowania ...

+0

Przypuszczam, że gdy zadzwonię do funkcji 'nodes', otrzymuję obiekt przed zmianami, tak jak Chrome nie otrzymuje najbardziej aktualnego obiektu. Jak mam to rozwiązać? – PLui

+0

Edytowałem z moim rozwiązaniem. –

Powiązane problemy