在客户端 ORM 中驯服 hasMany/belongsToOne 循环引用
Taming hasMany/belongsToOne circular reference in client side ORM
我在我的案例中使用 angular 但这也是一个一般性问题。我也知道其他前端 ORM 解决方案,如 js-data 和 restacular,但那是另一回事了。
给定一个由几个 Person
个实例组成的 People
集合:
[
{ 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 中保留循环引用的优势?
您需要编写自己的 stringify,将对象拉出到引用数组并用引用数组键替换它们。或者您可以使用我发现有用的 jsog 库
此外,如果您有兴趣尝试自己做,这个 Whosebug 回答
我在我的案例中使用 angular 但这也是一个一般性问题。我也知道其他前端 ORM 解决方案,如 js-data 和 restacular,但那是另一回事了。
给定一个由几个 Person
个实例组成的 People
集合:
[
{ 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 中保留循环引用的优势?
您需要编写自己的 stringify,将对象拉出到引用数组并用引用数组键替换它们。或者您可以使用我发现有用的 jsog 库
此外,如果您有兴趣尝试自己做,这个 Whosebug 回答