2016-01-30 2 views
1

J'utilise angular dans mon cas mais c'est aussi une question générale. Aussi, je suis au courant d'autres solutions ORM front-end comme js-data et restacular mais c'est une histoire différente.Apprivoiser hasMany/belongsToUne référence circulaire côté client ORM

une collection Étant donné People en plusieurs Person cas:

[ 
    { name: "Bob" }, 
    { name: "Dave" }, 
    { name: "Sarah" } 
] 

Comment chaque instance Person ont la capacité (méthode) pour pousser une nouvelle instance de lui-même avec des propriétés héritées dans sa collection parent? Disons une instance Person ressemble à ceci:

{ 
    name: "Bob", 
    parent: [ /* circular reference to collection */ ], 
    extend: function(attrs) { /* returns new object */ }, 
    create: function(attrs) { 
     var self = this; 
     //call factory method to create object 
     var person = self.extend(attrs); 
     //some http call to persist to backend 
     .then(function() { 
      //push new instance to parent so it's rendered in the view model 
      self.parent.push(person); 
     }); 
    } 
} 

Peut-être que cette méthode d'encapsulation est mauvais ... Je ne suis pas sûr. J'ai fait a plnkr qui tente de créer une directive qui hérite d'une référence circulaire codifiée JSON (pas bon) via une liaison bidirectionnelle.

directive

angular 
    .module("app", []) 
    .directive("appDirective", function() { 
     return { 
      scope: { data: "=appDirective" }, 
      bindToController: true, 
      controllerAs: "vm" 
     }; 
    }); 

html

<div app-directive="{foo: 'bar', info: vm.info}">{{vm.data}}</div> 

intérieur contrôleur parent

this.info = {}; 
//setup circular reference 
this.info.info = this.info 

Comment puis-je re tain le luxe de références circulaires dans mon ORM tout en contournant le problème de stringify JSON circulaire?

+0

Vous devez écrire votre propre stringify, tirant les objets à une tableau de référence et en les remplaçant par la clé de tableau de référence. Ou vous pouvez utiliser la bibliothèque [jsog] (https://github.com/jsog/jsog) que j'ai trouvé utile aussi – Beartums

+0

, [cette réponse StackOverflow] (http://stackoverflow.com/questions/10392293/stringify- javascript-object-with-circular-reference/12659424 # 12659424) si vous êtes intéressé à essayer de le faire vous-même – Beartums

+0

heureux que cela a aidé. On dirait que quelque chose qui aurait dû être pris en compte dans le noyau javascript (ou au moins angulaire), mais c'est ce que c'est. – Beartums

Répondre

1

Vous devrez écrire votre propre stringify, en extrayant les objets dans un tableau de référence et en les remplaçant par la clé de tableau de référence. Vous pouvez également utiliser la bibliothèque jsog que j'ai trouvé utile

aussi, cette réponse StackOverflow si vous êtes intéressé à essayer de le faire vous-même