How to Trigger Function on Value Change

How to trigger function on value change?

You need to use the Observer Pattern.
In the following code, a person subscribes to receive updates from the global wealth entity. When there is a change to global wealth, this entity then alerts all its subscribers (observers) that a change happened. Person then updates itself.

I make use of properties in this example, but they are not necessary. A small warning: properties work only on new style classes, so the (object) after the class declarations are mandatory for this to work.

class GlobalWealth(object):
def __init__(self):
self._global_wealth = 10.0
self._observers = []

@property
def global_wealth(self):
return self._global_wealth

@global_wealth.setter
def global_wealth(self, value):
self._global_wealth = value
for callback in self._observers:
print('announcing change')
callback(self._global_wealth)

def bind_to(self, callback):
print('bound')
self._observers.append(callback)

class Person(object):
def __init__(self, data):
self.wealth = 1.0
self.data = data
self.data.bind_to(self.update_how_happy)
self.happiness = self.wealth / self.data.global_wealth

def update_how_happy(self, global_wealth):
self.happiness = self.wealth / global_wealth

if __name__ == '__main__':
data = GlobalWealth()
p = Person(data)
print(p.happiness)
data.global_wealth = 1.0
print(p.happiness)

How to trigger a function when there is a value change in subscribed store in Svelte?

in componenet.svelte

    import { comparedProducts } from "../stores.js";

//if there is a change in $comparedProducts trigger this function eg. ([1,2])
const someFunction = () = >{
// do something
}

// stores can be subscribed to using .subscribe()
// each new value will trigger the callback supplied to .subscribe()

let unsubscribeStore = comparedProducts.subscribe((currentValue) => {
//currentValue == $comparedProducts
someFunction()
})

// call unsubscribeStore() after finishing to stop listening for new values

In javascript, how to trigger event when a variable's value is changed?

There is no event which is raised when a given value is changed in Javascript. What you can do is provide a set of functions that wrap the specific values and generate events when they are called to modify the values.

function Create(callback) {
var isGreen = false;
var isRunning = false;
return {
getIsGreen : function() { return isGreen; },
setIsGreen : function(p) { isGreen = p; callback(isGreen, isRunning); },
getIsRunning : function() { return isRunning; },
setIsRunning : function(p) { isRunning = p; callback(isGreen, isRunning); }
};
}

Now you could call this function and link the callback to execute go():

var traffic = Create(function(isGreen, isRunning) {
if (isGreen && !isRunning) {
go();
}
});

traffic.setIsGreen(true);

Trigger a function when value change using knockoutjs

Subscribe not work, so I still use event: {change: $parent.CurriculosChanged}

So, using ideia from siddhearth to get I get the value selected from my var, I can get the new value changing the $parent for $root

HTML

<select class="form-control m-b" data-bind="options: Curriculos,optionsText:'Text',optionsValue:'Value',optionsCaption:'Selecione', value: CurriculoSelected, event:{ change: $root.CurriculosChanged}"></select>

JS

 function PainelViewModel() {
var self = this;
self.Curriculos = ko.observableArray([]);
self.CurriculoSelected = ko.observable(0);
self.CurriculosChanged = function (c) {
console.debug(c.CurriculoSelected);
};
}

Check binding context



Related Topics



Leave a reply



Submit