Comment puis-je mettre correctement en œuvre d'analyser dans une base de modèle aux collections?

J'ai un squelette appelé modèle Member - il contient de l'adhésion des données telles que nom, prénom, e-mail, téléphone, etc. Il comprend également plusieurs valeurs de champs que j'ai besoin de garder comme des collections - ces sont Degrees et Affiliations.

La question, je suis en cours d'exécution lors de l'appel de la fetch() méthode dans mon modèle est qu'il y a une différence d'impédance de toutes sortes entre une base de tableau, et les objets de collection que j'ai dans mon modèle. Depuis parse, par définition, est censé renvoyer un hachage pour être utilisé dans set plutôt que de réellement les valeurs de réglage, il est impossible pour moi de mettre mes collections de cette façon. Par exemple - si je retourne un objet JavaScript pour Degrees qui ressemble à quelque chose comme: {degrees: [{id: 1, title: "PhD"}]}, alors cette fonction convertit mon degree collection dans un tableau plat. Voici mon code:

window.Models.Member = Backbone.Model.extend({

    url: '/api/member',

    initialize: function() {

        _.bindAll(this);

        this.set('degrees', new window.Collections.DegreesList());

        this.fetch();

    },

    parse: function(response) {

        var setHash = {};

        setHash.first_name = response.first_name;
        setHash.last_name = response.last_name;
        setHash.office_phone = response.office_phone;

        //When this is run, this.get('degrees') will now return a flat array rather than a DegreesList collection
        setHash.degrees = _(response.degrees).each(function(item) { 
                return {id: item.id, title: item.title} 
        });

        return setHash;

    }

});

Je pourrais définir manuellement les collections dans ma fonction d'analyse, mais qui semble comme sa subversion de l'épine Dorsale façon, et hacky.

EDIT: j'ai temporairement résolu le problème en procédant comme suit:

parse: function(response) {

    var setHash = {};

    setHash.first_name = response.first_name;
    setHash.last_name = response.last_name;
    setHash.office_phone = response.office_phone;

    this.get('degrees').reset( response.degrees );

    return setHash;     
}

Je doute que cela soit la solution optimale, mais cela ne fonctionne pour l'instant. Je suis ouvert à de meilleures suggestions.

Essayez ceci: fossé de la parse: fonction (il ne semble pas être nécessaire), et la place à l'intérieur de initialize: manuellement transformer le degrees attribut à partir d'un tableau à l'épine Dorsale de la collection...
parse est appelée automatiquement une fois que le fetch méthode retourne. J'ai pu réinitialiser manuellement le degrees attribut à une collection après fetch est appelé, mais alors je n'aurais pas toutes les données dans cette collection que je veux...et les données sont à venir dans.
Que vous avez à faire beaucoup de chose avec degrees si vous ajoutez manuellement dans le parse. Aller avec @ŠimeVidas suggestion et de l'utilisation d'un Backbone de collecte pour eux. Cela vous permet de traiter chaque degree l'épine Dorsale.

OriginalL'auteur rybosome | 2012-02-29