Javascript 如何确定实际计算值是否已更改
对于我的布局,我有一个组件需要在渲染完成后初始化,如果数据中有任何更改,则再次初始化 这将非常有效,但我依赖于每个客户机的过滤和更改输出的计算值,并通过观察经常触发的更改事件。我所做的:Javascript 如何确定实际计算值是否已更改,javascript,ractivejs,Javascript,Ractivejs,对于我的布局,我有一个组件需要在渲染完成后初始化,如果数据中有任何更改,则再次初始化 这将非常有效,但我依赖于每个客户机的过滤和更改输出的计算值,并通过观察经常触发的更改事件。我所做的: let myRactive = new Ractive({ el: '#clientContainer', template: myTemplate, magic: true, modifyArrays: true, data: {data}, //=> this
let myRactive = new Ractive({
el: '#clientContainer',
template: myTemplate,
magic: true,
modifyArrays: true,
data: {data}, //=> this is an awful lot of Data changing all the Time
computed: {
usefulData(){
let tempdata = this.get('data');
//=> a lot of rearranging, filtering and sorting
// to adapt the data only for this specific client
return tempdata;
}
onrender: function () {
initmyLayoutComponent()
}
});
所以我试着这样做
myRactive .observe( 'usefulData', function ( newValue, oldValue, keypath)
destroymyLayoutComponent();
initmyLayoutComponent();
});
但是,每当数据中的任何内容发生变化时,即使它与usefulData完全无关,也会触发a,而在ractive呈现DOM之前,会触发b,因此组件会提前重新初始化
有没有一种方法可以只观察计算值,或者——更好的方法是——只观察计算值中的特定操作,就像我想对添加/删除的对象作出反应,而不是对更改的值作出反应一样?那么,您可以做的是,实际上将clientData对象发送到模板中,然后只侦听该数据 让myRactive=新Ractive{ el:‘客户容器’, 模板:{{clientData.name}{{email}}clientData已更改:{{cnt}}, 魔法:真的, ModifyArray:对, 数据:{ 姓名:'你好', 电邮:'a@a.com', cnt:0 },//=>这是一个非常多的数据一直在变化 计算:{ 有用数据{ 让tempdata=this.get'name'; //创建自己的数据对象 临时数据={ 名称:“世界” }; //将其设置为实际上下文 设置'clientData',tempdata; } }, oninit:函数{ 观察'clientData',函数newValue,oldValue,keypath{ 让cnt=this.get'cnt' cnt+=1; 这个。设置'cnt',cnt; log“仅侦听计算数据”; },{init:false}; 这个。获取“有用的数据”; }, onrender:函数{ //做点什么 }, };
谢谢。我将尝试这种方法,并尝试调整我的原始脚本。