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?
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
, [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
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