我希望在连接到网页的所有用户之间共享一些可观察对象。
当修改了一个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
尝试两次非常快地更改参数,您会注意到创建了一个循环,并且参数每两秒在两个值之间变化。
答案 0 :(得分:0)
按照Jeroen的建议,我将observable分成了两个:
self.param1_local
和
self.param1_remote
仅当self.param1_local
被修改且与self.param1_remote