在客户端ORM中Taming hasMany / belongsToOne循环引用

时间:2016-01-30 07:03:20

标签: javascript angularjs orm circular-reference

我在我的情况下使用角度,但这也是一个普遍的问题。此外,我也知道其他前端ORM解决方案,如js-data和restacular,但这是一个不同的故事。

给定由People个实例组成的Person集合:

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

每个Person实例如何具有将具有继承属性的新实例推送到其父集合的能力(方法)?假设Person实例如下所示:

{
    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);
        });
    }
}

也许这种封装方法很糟糕......我不确定。我让a plnkr尝试创建一个通过双向绑定继承JSON字符串循环引用(不好)的指令。

指令

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>
父控制器内的

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

在解决循环JSON字符串化问题时,如何在ORM中保留循环引用的奢侈性?

1 个答案:

答案 0 :(得分:1)

您需要编写自己的stringify,将对象拉出到引用数组并用引用数组键替换它们。或者您可以使用我认为有用的http://devblogs.nvidia.com/parallelforall/egl-eye-opengl-visualization-without-x-server/

另外,如果你有兴趣尝试自己做这个jsog答案