Myślę, że muszę się nieporozumienie coś fundamentalnego, ponieważ w moim umyśle powinien to być najbardziej podstawowy przypadek dla obserwowalne, ale dla mojego życia nie mogę dowiedzieć się, jak to zrobić z dokumentów.RxJS: Jak mogę "ręcznie" zaktualizować obserwowalne?
Zasadniczo, chcę być w stanie to zrobić:
// create a dummy observable, which I would update manually
var eventObservable = rx.Observable.create(function(observer){});
var observer = eventObservable.subscribe(
function(x){
console.log('next: ' + x);
}
...
var my_function = function(){
eventObservable.push('foo');
//'push' adds an event to the datastream, the observer gets it and prints
// next: foo
}
Ale nie udało się znaleźć sposób jak push
. Używam tego dla obsługi kliknięcia i wiem, że mają do tego Observable.fromEvent
, ale próbuję użyć go z React i wolałbym po prostu zaktualizować strumień danych w wywołaniu zwrotnym, zamiast używać całkowicie inny system obsługi zdarzeń. Więc w zasadzie chcę to:
$("#target").click(function(e) {
eventObservable.push(e.target.text());
});
Najbliżej mam używał observer.onNext('foo')
, ale to nie wydaje się, że rzeczywiście działa i nazywa na obserwatora, który nie wydaje się słuszne. Obserwator powinien być tym, który reaguje na strumień danych, a nie zmienia go, prawda?
Czy po prostu nie rozumiem związku obserwatora/obserwowalnego?
Spójrz na to, aby wyjaśnić swój pomysł (Wprowadzenie do programowania reaktywnego, czego Ci brakowało): https://gist.github.com/staltz/868e7e9bc2a7b8c1f754. Tutaj także jest mnóstwo zasobów, dzięki którym możesz poprawić swoje zrozumienie: https://github.com/Reactive-Extensions/RxJS#resources – user3743222
Sprawdziłem pierwszy, wydaje się solidnym zasobem. Druga to świetna lista, na której znalazłem http://aaronstacy.com/writings/reactive-programming-and-mvc/, który pomógł mi odkryć Rx.Subject, który rozwiązuje mój problem. Więc dziękuję! Kiedy już napisałem nieco więcej aplikacji, opublikuję moje rozwiązanie, po prostu chcę przetestować to nieco. – LiamD
Hehe, dziękuję bardzo za zadanie tego pytania, już miałem zadać to samo pytanie z myślą o tym samym kodzie :-) – arturh