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:函数{ //做点什么 }, };
谢谢。我将尝试这种方法,并尝试调整我的原始脚本。