2

我有一个对象,它会在用户操作上不断变化以跟踪网格,所以我认为是否有可能在对象更改后立即触发事件?我知道这可以做到,但是我们可以不在对象上注册一个事件,并且一旦对象发生变化,我们就可以触发调用处理对象状态的函数的事件吗?

我想出的作品但是每次我更改对象时都必须手动触发我们可以坐在那里等待对象更改并对其采取行动吗?

 $( requestProcessStatus ).trigger ("valueChanged"); // trigger this each time object changes` 

$( requestProcessStatus ).bind("valueChanged", function() {
console.log("object changed");
}); // do whatever in here 


 requestProcessStatus : {
    RequestNumber : '',
    ProcessStatus : '',
    LoanTrackingInfo : [
      LocalNumber: '',
      ProcessStatus: ''
    ]
},

我有这个对象,一旦用户在文本框中输入 LocalNumber,我就会启动ajax请求,如果响应成功,LoantrackingInfo 数组就会被 LocalNumber 和 proccessStatus= Success 填充,它可以扩展到无限。一旦对象发生变化,我想在我的网格中反映这些变化,该网格显示所有本地编号及其在网格中的相应状态?

那么是否可以只听对象更改事件?

4

2 回答 2

5

您可以将“set + trigger”包装在方法中:

requestProcessStatus.setVal = function( attr, value ){
   this[attr] = value;
   $(this).trigger('valueChanged');
}

显然,如果您希望事件始终触发,您将有责任仅通过此方法修改对象...

于 2013-10-09T15:10:57.797 回答
0

“我们可以坐在那里等待对象改变并对其采取行动吗?”

是的,但这会非常低效,你最好做你已经在做的事情。

这是你会怎么做的:

previousObjectState = {};
function checkForChanges () {
    // iterate over object looking for changes
    if (changes happened) {
        $(theObject).trigger("change");
    }
    previousObjectState = $.extend(true,{},theObject);
}

setInterval(checkForChanges,100);

它必须每隔 n ms 解析和查找更改,这可能非常昂贵。

于 2013-10-09T15:07:02.960 回答