2012-01-09 13 views
10

Jestem nowy na relativly backbone.jsJak zbudować Collection/Model z zagnieżdżonego JSON z backbone.js

Mam JSON jak pokazuje zdjęcie! Widziałem kilka odpowiedzi w związku z kręgosłupem, ale wciąż nie rozumiem!

Jak mogę przekonwertować ten JSON na Backbone.js Kolekcje/Modele ??

Aktualizuję za pomocą kodu, ale nie działa tak, jak powinien! nie widzę model kiedy zrobić:

Moja struktura jest następująca:

[0] jest zbiorem modeli

[kluczach] + ... + [Szybko]: to zbiór modeli

(kluczach) => [0] + ... + [9]: są modele (tytuł zawiera ciąg, ścieżka zbyt)

Thanks a lot !!

EDIT (01.10.12):

Moje rozwiązanie:

window.initModel = Backbone.Model.extend({ 
    defaults: { 
    "title": "", 
    "path": "" 
    } 
}); 
window.CustomCollection = Backbone.Collection.extend({ 
    model: initModel 
}); 
window.Init = Backbone.Model.extend({ 
    url : function(){ 
    return "/api/data.json"  
    }, 

    parse: function(response) { 

    clefs = new CustomCollection(); 
    clefs.add(response.clefs);   
    this.set({clefs: clefs}); 

    ..... 

    rests = new CustomCollection(); 
    rests.add(response.rests);   
    this.set({rests: rests}); 
} 
}); 

this pomógł mi też!

Nested Array

+0

Szukasz mieć zagnieżdżone modele centralna/kolekcje jak również (nie jest to 100% niezbędne, w zależności od wymagań. Możesz być w stanie uzyskać za pomocą tylko jednego modelu kręgosłupa, z jednym obiektem. –

+0

@trouble Po przejściu z Backbone-Relational poszedłem z twoim rozwiązaniem (przesłanianie parsowania). Z Backbone-Relational niektóre zdarzenia "add" itd. Nie były wyzwalane i powodowały problemy. Dzięki za publikację! – greenimpala

Odpowiedz

17

jestem w pracy, więc nie mogę dać ci w pełni zakodowaną odpowiedź, ale Istotą jest, można wykonać następujące czynności w modelach najwyższego poziomu, aby osiągnąć zagnieżdżonego modelu hierarchii:

var AmericasNextTopModel = Backbone.Models.extend({ 
    initialize: function(){ 

     this.set({ 
      clefs: new ClefCollection(this.get('clefs')), 
      accidentals: new AccidentalCollection(this.get('accidentals')), 
      notes: new NoteCollection(this.get('notes')), 
      rests: new RestCollection(this.get('rests')) 
     }); 
    } 
}); 

nie używam kręgosłup-relacyjne, więc nie mogę dać odpowiedź dotyczącą tego.

Czy tworzysz przeglądarkę/edytor tekstów do przeglądarek online? : D Cool Chciałbym to zobaczyć, kiedy skończysz.

+0

Tak, mam: D !! Powiem ci kiedy skończę! robię aktualizację w moim poście o ur odpowiedź! – trouble

0

reset metoda (see 'reset') pozwala przekazać tablicę JSON do kolekcji. To jest odpowiednik metody PUT, zastępującej określoną kolekcję za pomocą skrótu JSON.

Można również użyć metody add do dodania do istniejącej kolekcji lub przekazać skrót JSON do konstruktora podczas tworzenia nowej kolekcji.

Będziesz musiał zrobić kilka podstawowych czyszczenia swojej tablicy, aby dostać go w odpowiednim formacie, a następnie convert it to JSON

+1

huh! Widzę twoje punkty! ale to naprawdę nie pomoże mi stworzyć prawdziwą kolekcję kluczy, ..., reszta nie jest? Naprawdę muszę go mieć tak, jakbym go opisał! po prostu mnie popraw, jeśli jestem zły! Dziękuję Ci! – trouble

+0

My Bad! powyższy obrazek to JSON! przepraszam – trouble

0

Używam PHP do pobrania kanału jako JSON, ponieważ jest on w innej domenie. Zapisać te wyniki do zmiennej JS, a następnie po prostu miałem sukces przy użyciu tego, aby ją do mojej kolekcji Backbone ...

var feedCollection = new Backbone.Collection(); 
feedCollection.set(myFeedJSON.nestedObject.nestedArrayIWant);