浏览器之间共享的Knockout observable - 仅在本地更改值时才进行订阅

时间:2014-05-19 10:22:40

标签: knockout.js

我希望在连接到网页的所有用户之间共享一些可观察对象。

当修改了一个observable时,更新的值被发送到后端(在我的情况下使用socket.io或任何其他方法)。

当后端收到更新后的值时,它会将值发送给所有用户。甚至是发送新值的用户。我无法改变后端的这种行为。

要验证observable是否已更改,我使用了observable的subscribe方法。

如何在subscribe方法中知道observable是在本地还是远程修改的,这样我只有在本地修改了值后才能将值发送到后端?

以下一些代码:

我的观察:

self.param1 = ko.observable(0);

订阅将更新发送到后端

self.param1.subscribe(function() {
    // send value to backend
    // this function should not start if param1 is modified remotely
    // to avoid loops 
});

当从后端收到新值时,observable被远程修改

self.param1(new_value_received_from_backend);

Here is a JSFiddle simulating the problem

尝试两次非常快地更改参数,您会注意到创建了一个循环,并且参数每两秒在两个值之间变化。

1 个答案:

答案 0 :(得分:0)

按照Jeroen的建议,我将observable分成了两个:

self.param1_local

self.param1_remote

仅当self.param1_local被修改且与self.param1_remote

不同时,参数的值才会发送到后端

JSFiddle link