2017-03-27 113 views
0

我有2个JS对象,每个都在网页中呈现为Tree。“同步”Vue.js中的两个JS对象

我的问题是如何在用户对其他用户应用更改时强制更改其中一个用户。

我的基本想法是“绑定onChange”对每个对象显然注意不要产生无限循环。

在jQuery中看起来很难,我读了一些关于“代理”的内容,但我不明白它是否可以帮助我解决这个问题。

我最后想到vue.js.我读过那个vue.js是非常高效的syncing js and dom objects所以它们之间的转换几乎很容易,也许有可能同步两个js对象?


更清晰,这里更多的细节:

我有这样的事情:

let obj1={key1:1, key2:[1,2,3]}; // defines arbitrary data obj 
let obj2={}; 
$.extend(obj2,obj1); // defines obj2 as clone of obj1 

// do "something magic" here 

我想获得如下:

obj1.key1=2; // => should automatically set obj2.key1=2; under the hood 
obj2.key2.push(4); // => should automatically set obj1.key2=[1,2,3,4] under the hood 

有什么诀窍来绑定两个(相同的,克隆的)数据对象,以便对其中一个进行的任何更改都会反映到另一个对象上,就像第e涉及对象键“指向”相同的数据?由于对象在JavaScript中分配的“引用”,这是可行的,如果我们定义了一个第三个对象“obj_value”,我们将其指定为值以上对象如下:

obj1.key=obj_value; // both obj1.key and obj2.key point to the same object 
obj2.key=obj_value; 

,但我想更多的东西一般情况下,一个关键的obj直接绑定到另一个,在伪代码

obj1.on('change',function(key,value) 
{ 
    obj2.key=value; 
}) 
+1

如果你使用计算属性,你不必强制,你能提供关于这些对象是什么样子的更多细节,以便我可以在小提琴上解决它? –

回答

0
watch: { 
    objChangedByUser: function (value) { 
    this.cloneOfobjChangedByUser = Object.assign({}, value); 
    } 
} 

或者:

computed: { 
    cloneOfObjChangedByUser: function() { 
    return Object.assign({}, this.objChangedByUser); 
    } 
}