2012-07-12 3 views
0

J'ai un formulaire pour éditer un enregistrement de fournisseur. L'enregistrement du fournisseur a une relation avec plusieurs adresses, de sorte qu'un fournisseur peut avoir la maison, le bureau, les vacances, etc types d'adresses. L'objet Adresses json qui vient du serveur ne fait qu'apporter les adresses que le fournisseur a, donc si le fournisseur n'a qu'une adresse de type "vacances", alors c'est le seul enregistrement qui arrive mais dans le formulaire d'édition je dois avoir tous les types d'adresses pour éditer les existantes ou en ajouter une nouvelle.Comment fusionner deux objets json en un

Je ne sais pas si mon approche est correcte mais j'ai sous ma forme un "jsonBaseAddresses" qui contient tous les types possibles d'adresse et cet objet est lié en utilisant Knockout à la forme (cela fonctionne réellement) donc je veux fusionner le "jsonRemoteAddress" avec "jsonBaseAddresses" afin d'avoir le "jsonBaseAddresses" mais fusionné avec les données qui viennent dans l'objet json distant.

Encore une fois, je ne sais pas si c'est la bonne façon de le faire. Appréciez toute aide. Voici un exemple de ce que je veux faire.

http://jsfiddle.net/HJrGf/4/

Merci

+0

Pour clarifier, la liste des adresses de base est le seul * possible * ensemble d'options? Si le serveur envoie un type qui n'est pas dans cette liste, doit-il être ignoré? – Tyrsius

+0

Oui, c'est une liste fixe. Aucune autre option n'est autorisée dans la base de données. – VAAA

Répondre

1

Pourquoi ne pas simplement parcourir les adresses à distance et de les pousser à des adresses dans le modèle de vue comme?

var vm = new App(jsonBaseAddresses); 
for (var i = 0; i < jsonRemoteAddresses.length; i++){ 
vm.addresses.push(new Address(jsonRemoteAddresses[i]); 
} 

Et ainsi de suite ...

Pour fusionner les adresses que vous pouvez utiliser des solutions suivantes:

  1. Vous pouvez introduire la propriété à Adresse comme Equals et comparer les champs qui identifient l'adresse unique

  2. Sélectionnez une implémentation dans ce post How to determine equality for two JavaScript objects? pour obtenir l'adr Essay code de hachage et dans la boucle ci-dessus comparer le hachage codes des adresses à fusionner. J'ai utilisé cette solution dans l'un de mes projets . Et aussi vérifier cela http://documentcloud.github.com/underscore/#isEqual

+0

Merci Madman, Si je pousse alors j'obtiendrai plus d'adresse et il y a seulement 4 types d'adresses disponibles. Donc ce dont j'ai besoin, c'est de les fusionner donc j'ai toujours 4 types. – VAAA

+0

Vérifiez ma mise à jour – Madman

+0

mmm ouais peut-être faire une adresse de base de boucle et voir si l'adresse se termine dans les adresses distantes, si c'est le cas, boucle alors toutes les propriétés et les mettre à jour en utilisant l'adresse distante droite? – VAAA

Questions connexes