問題タブ [reactive-extensions-js]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 2 つの依存ストリームの安全な更新
演習として、互いに更新する 2 つの依存ストリームを構築しようとしています。
テスト アプリケーションは単純な "インチ <-> センチメートル" コンバーターであり、両方の入力が編集可能です。
私が経験している問題は、1 つのフィールドの変更を引き起こす再帰を停止する方法がわからないことです。
問題をよりよく説明するために、コードの関連部分を見てみましょう。
そのため、それぞれが現在の対応する値を保持するサブジェクトを定義します。
ここで、インチ単位の値を2
(キーボードを使用inValue.onNext(2);
またはキーボード経由で) に変更したとします。
次に何が起こるか - ハンドラー #2 がトリガーされ、対応するセンチメートル単位の値の再計算が呼び出されます。どの結果にcmValue.onNext(0.7874015748031495)
.
実際、この呼び出しはハンドラー #1 によって処理され、0.7874015748031495 * 2.54
別の呼び出しを引き起こす数式を使用して、インチ単位の値 (手動で入力したもの) が再計算されinValue.onNext(1.99999999999999973)
ます。
幸いなことに、FP 丸め誤差のため、ここで停止します。しかし、他のシナリオでは、これによりさらにループが発生したり、無限再帰が発生したりする可能性があります。
ご覧のとおり、問題を部分的に解決しました.distinctUntilChanged()
。これにより、少なくとも変更時の無限再帰から保護されますが、この場合、値が同一ではないため、問題を完全に解決することはできません (FP 操作のため)。自然)。
問題は、自己再帰をまったく引き起こさない一般的な双方向バインディングをどのように実装するかということです。
丸めを使用.select()
することは、この特定の問題の部分的な解決策であり、一般的なものではありません (私と他のすべての人が好む)。
完全なコードとデモ: http://jsfiddle.net/ewr67eLr/
javascript - Rx.Subjects (A->B->C->A) のチェーンがありますが、最後のステップが機能しません
私は Rx* はまったく初めてです。論文に RxJS を使用して MVC のリアクティブ バージョンを作成しようとしています。大まかにhttps://github.com/staltz/mvi-exampleに基づいています
コーディングを始める前に RxJS をもっと勉強しておくべきだったのかもしれませんが、私は通常、プールの深いところにジャンプするだけで最善のことを学べることに気付きました。しかし、今は完全に立ち往生しています。
ビューには、数値とボタンを含むテキスト フィールドがあります。ボタンを押すとテキストの色が変わり、テキストをクリックすると数値が繰り返されます。値はモデルに保存されるため、「チェーン」は 3 つのオブジェクト (View->Controller->Model->View) をすべて通過します。ボタンを押すのにモデルは必要ないので、チェーンは View->Controller->View です。
他のすべては機能しますが、チェーンの最後の部分 (->View) で問題が発生します。テキスト (ビュー内) をクリックすると、変更がコントローラーとモデルに反映されますが、ビューにはモデルの変更が通知されません。私がこれを理解する方法は、これらすべてが同じ方法で実装されているため、理由がわかりません。
呼び出されない関数を指定するために、以下のコード サンプルにコメントを追加しました。
コードはこちらから入手できます。私が言ったように、コードは私の論文のためのものであるため、いくつかの設計上の決定とアプリ自体が奇妙に見えるかもしれないことに注意してください. 以下に、最も関連性が高いと思われる部分も含めてみました。完全な例を提供する必要があることはわかっていますが、この場合は不可能です。
オブジェクトが取得する「obs」パラメーターは、オブザーバブルを格納するために使用する内部データ構造です。該当部分は
View.js
Controller.js
Model.js
したがって、問題は View.setValue() と View.setNumberColor() です。
javascript - JS イベントから Rx.Observable を作成できません
犬のように単純な例でrx.jsを使用する方法を理解しようとしていますが、欠落している参照またはファイルが機能していないことを意味することがわかりません。
それは文字通りそれです。スクリプト ラインは、nuget から新たにダウンロードした rx.js 2.4.1 のローカル コピーを正しく読み込みます。
Rx.Observable.fromEvent is not a function というエラーが表示されるため、参照が欠落していると想定しています。
ちょうど夜の時間かもしれませんが、私は自分が間違っていることを理解するのに苦労しています. 何か助けはありますか?
angularjs - RxJS - 読み込みインジケーター
AJAX ストリームの読み込みインジケータを表示する「Rx」の方法に頭を悩ませています。
私が理解している限り、.do()
副作用に使用する必要がありますloading
が、設定はそうであると思いますが、正しいやり方ではないように感じます。
これを行う方法のよりクリーンな/より良い/適切な例を誰かが提供できますか?
ありがとう!
更新 1
これを 2 つのストリームに分割することにしました。requestSource
とresponseSource
。
次に、2 つの個別のサブスクライバーを用意します。
サブスクライブの役割を正確に保つため、このアプローチが気に入っています。loading
応答サブスクライバーは、 への設定を気にする必要はありませんtrue
。に設定することだけを気にしfalse
ます。