3

観察可能な配列が変化するイベントをキャプチャしようとしています。

このJSFiddleの完全な例

この質問を読んだ後、KO はメンバーの値の変更をキャプチャしないことを理解しました。

私がキャプチャしようとしている変更は、配列readyのオブジェクトのフラグです。groups従来の KO の方法を使用して、次のように計算を定義します

self.groups_status = ko.observableArray(
   $.map(self.groups(), function(g) { return g.ready();}));

これにより、オブザーバブルが各オブジェクトの準備完了フラグにバインドされます。問題は、KO が値を追跡しないことです。

だから私は次のことを試しました

self.groups_status = ko.observableArray(
   $.grep(self.groups(), function(g) { return g.ready();}));

ready違いは、オブジェクトのみを保持するようになったことです。配列が変化しています。これも機能していません。

self.groups_statusコマンドを登録して実行できるようにする必要があります。

PS githubでこの問題に遭遇しましたが、機能させることができませんでした。

4

2 に答える 2

1

最初の例では、実行時に g.ready() がグループのステータスを返すため、ブール値の配列に初期化される真新しい監視可能な配列を作成します (ready() がブール値であると仮定)。

次のように、実際のオブザーバブルを単純に返すようにコードを変更できます。

self.groups_status = ko.observableArray(
   $.map(self.groups(), function(g) { return g.ready;}));

配列内の値が更新され、特定の「グループ」で準備完了フラグが変更されました。ただし、これは groups() 配列に追加された新しいアイテムを取得しません。

$.grep元の ready() 状態のみに基づいてグループ インスタンスの配列を返し、どちらも変更されないため、さらに悪化します。

アイテムが追加されたときに監視可能な groups_status を更新する場合は、監視可能な配列ではなく、computed() 関数の使用に関する回答を参照してください。

于 2013-10-16T12:19:37.120 に答える