J'ai le même problème alors que je suis en train d'écrire mon épine Dorsale de l'application. Avoir à traiter avec embedded/modèles imbriqués. J'ai fait quelques réglages que je pensais était un très élégante solution.
Oui, vous pouvez modifier la méthode d'analyse de changer les attributs autour de l'objet, mais tout cela est en fait assez difficile à maintenir du code de l'OMI, et se sent de plus de un hack qu'une solution.
Voici ce que je propose pour votre exemple:
D'abord définir votre Modèle de Mise en page comme si.
var layoutModel = Backbone.Model.extend({});
Alors voici une image du Modèle:
var imageModel = Backbone.Model.extend({
model: {
layout: layoutModel,
},
parse: function(response){
for(var key in this.model)
{
var embeddedClass = this.model[key];
var embeddedData = response[key];
response[key] = new embeddedClass(embeddedData, {parse:true});
}
return response;
}
});
Notez que je n'ai pas falsifié avec le modèle lui-même, mais simplement de passer de nouveau l'objet désiré à partir de la méthode d'analyse.
Cela devrait s'assurer que la structure de la imbriquée modèle lorsque vous êtes en train de lire à partir du serveur. Maintenant, vous pouvez remarquer que l'enregistrement ou le réglage n'est pas réellement traitée ici, parce que je pense qu'il fait sens pour vous de définir le modèle imbriqué explicitement en utilisant le bon modèle.
Comme suit:
image.set({layout : new Layout({x: 100, y: 100})})
Aussi, prenez note que vous êtes réellement appeler la méthode parse dans votre imbriquée modèle en appelant:
new embeddedClass(embeddedData, {parse:true});
Vous pouvez définir autant de modèles imbriqués dans l' model
domaine que vous avez besoin.
Bien sûr, si vous voulez aller aussi loin que l'enregistrement du modèle imbriqué dans sa propre table. Ce ne serait pas suffisant. Mais dans le cas de la lecture et de l'enregistrement de l'objet dans son ensemble, cette solution devrait suffire.