問題タブ [computed-observable]
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 - 継承とオーバーライド Knockout 計算オブザーバブル
私は、JavaScript アプリをよりスケーラブルにすることに取り組んできました。このアプリは、knockout.js を使用して、ユーザーが編集および更新できるように、ある種のデータベース アイテムのグリッドをバインドします。私は今、継承を扱い、それを継承する BaseModel とモデルを持つ道を進んでいます。私が抱えている問題は、継承するクラスによって BaseModel で定義されている計算されたオブザーバブルをオーバーライドしたいときに発生します。ユースケースはこちら。
ベース グリッドには、UI がバインドする計算されたオブザーバブルがあります。計算されたオブザーバブルは、ユーザーが入力して検索できるテキスト ボックス フィルターを使用して、オブザーバブル配列から機能します。かなり基本的です。
子クラスであるロールは、特定のタイプのグリッドであり、ビジネス要件の一部は部門用のフィルターを持つことでした。これは UI のドロップダウンです。基本クラスの計算されたオブザーバブルを、子クラスのロール実装でオーバーライドしたいと考えています。それを達成する方法がわからない。
ここに JSFiddle があります: http://jsfiddle.net/Icestorm0141/vx6843pt/6/
BaseGridViewModel:
子クラス:
ここ数日、これについて多くの調査を行ってきましたが、まだ解決策を見つけていないことに驚いています。私は何か特別なことをしているような気がしませんが、誰かが何か提案をしてくれるかもしれません。私は誰に対してもオープンです!
knockout.js - applyBindings まで ko.computed を実行して待つ
循環依存関係を持つビュー モデルがあるとします。通常の状況ではこれを避けるべきであることはわかっていますが、この場合は、自分で制御できないため、できないと想定してください。親と子は相互に参照します。以下は、簡潔にするために非常に単純化された例です。
HTML:
JS:
問題はko.computed
、最初の初期化時に実行されることです。すべての瞬間にのみ実行される場合は、applyBindings
まったく問題ありません。
1 つの解決策は、ko.computed を完全に削除し、単純な通常の関数を使用することです。これらは、applyBindings の時点でのみ実行されます。問題はもちろん、キャッシュ機能などを失うなど、ko.computed の他のすべての利点を失うことです。
計算されたオブザーバブルがそのapplyBindings
フェーズでのみ初期化を開始すると言う方法はありますか?
knockout.js - ko.computed は、クロージャー関数内で宣言されている場合、オブザーバブルにアクセスできません
次のモデルを作成しましたが、pureComputed オブザーバブルApprovalIconCSSが関数コンテキストから Approved() オブザーバブルにアクセスできない理由がわかりません。
コンテキストにアクセスできない理由を誰かが明らかにできるかどうかに感謝します。乾杯!
javascript - オブジェクトをリセットせずに Computed Observable を再計算する
最近 Knockout を使い始めたのですが、問題が発生しました。これをあらゆる方法でグーグル検索してみましたが、該当する結果が見つかりませんでした。
私がこのモデルを持っているとしましょう:
HTMLでは、計算されたオブザーバブルにバインドしていますが、オブザーバブルが変更され、オブザーバブルが再計算Parameters
されるたびに、計算されたアイテムのすべての状態が失われます。Query
Parameters
これが意味することは、HTML で foreach をバインドしParameters
、その foreach に次のようないくつかの入力ボックスがある場合です。
ユーザーが入力に入力したテキストは、Computed Observable が再計算されると失われます。
これを解決するにはどうすればよいですか?
javascript - Knockout.js: 計算されたオブザーバブルが期待どおりに更新されない
編集:関数 populateDropdown および関数 isSystemCorrect のコードを追加しました (下部を参照)
編集2少し絞り込みましたが、計算されたオブザーバブルのarrayFilter関数で問題が発生したようです。これは、何を試しても空の配列を返します。フィルタリングの直前に self.testsuites() が正常に見えることを確認しましたが、フィルタリングはまだ失敗します。
計算されたオブザーバブル、filteredTestsuites に問題があります。
スクリーンダンプからわかるように、テストスイートのオブザーバブルは正しく設定されていますが、計算されたオブザーバブルは空のままです。また、ドロップダウンメニューから「支払い」以外のオプションを選択しようとしましたが、これがオブザーバブルをトリガーするかどうかを確認しましたが、そうではありませんでした。
self.testsuites() または self.dropdownSelected() が変更されるたびに、計算されたオブザーバブルが更新されると思いますが、どちらでもトリガーされないようです。
ここで何が間違っていますか?
どちらかが変更されるたびに、選択したドロップダウンオプションの後に、計算されたオブザーバブルフィルターをテストスイートにしたいだけです。
関数 isSystemCorrect:
ember.js - 計算されたプロパティでモデルを作成すると、メモリ リークが発生しますか?
テキスト配列と画像配列を取り込んで、外積をツイートとして計算する「スクランブラー」を作成しています。私が心配している関数は次のようになります。
私の心配は、私がたくさんのモデルを作成していて、Ember のガベージ コレクションをよく理解していないことです。
では、ここでメモリリークが発生する危険がありますか?
ありがとう!
knockout.js - ノックアウト匿名の計算されたオブザーバブルが複数回実行されている
最近、私が現在取り組んでいるプロジェクトでかなり奇妙なコードに出くわしました。この問題を示す孤立した例を次に示します。
匿名計算オブザーバブルのアラートは、viewModel が作成されたときだけでなく、コンストラクター関数の完了後に依存オブザーバブル (この場合は lastName) が変更されるたびに発生します。私が現在維持しているコードでは、これは特定のコードを実行してバインドされた ui ウィジェットを再描画するために使用されます。だから私の質問は:
- これは最終的に修正されるノックアウトのバグですか? (更新後に機能しなくなる前に、この魔法を削除したほうがよいでしょう)
- これはある種の一般的なパターンであり、使用しても問題ありませんか?
更新:私が維持する必要があるプロジェクトで遭遇した実際のケースでは、従属オブザーバブルへの直接参照のないアラートの代わりに数行のコードがあり、オブザーバブルの値は、計算内から行われたネストされた関数呼び出しで変更されます。与えられた例は非常に単純化されています。また、両方の計算されたオブザーバブルは、おそらく最初に計算する唯一の目的であるスロットルエクステンダーで装飾されています。