2011-06-27 11 views
1

たとえば、観測可能な配列はマッピング関数(ko.mapping.fromJS)を使用して設定します。 observable配列内の値に基づいて、divの可視性をデータバインドするにはどうすればよいですか?foreachを使用してobservable配列内の値に応じてknockoutJSの可視性を変更するには

+0

のような何かをする必要があり、それは再レンダリングするテンプレートを確実にするために、あなたはより良い答えを得ることができるでしょう。たとえば、ブール値、値<25、文字列== "表示"を使用していますか? –

+0

下記のコメントを参照してください。 – jaffa

答えて

1

ko.observableArrayを使用する場合、配列内の個々のオブジェクトではなく、を参照しているのはです。したがって、配列からプッシュまたはポップされたものがあれば、ノックアウトがそれを認識してテンプレートを更新しますが、配列の個々のオブジェクトに変更がある場合などです。配列メンバの特定のプロパティが変更されると、ノックアウトはテンプレートを更新しません。

解決策は、アレイ内のアレイメンバーを購読したい別々に観察することです。あなたのケースでは、観察、配列内の値は、最初のインデックス部材内に存在する場合、あなたはあなたのビューモデルで次の操作を実行する必要があるだろうと言うことができます:

theArray: ko.observableArray(initialArray); 
theValue: ko.observable(this.theArray[0]); 

とdivの表示:

<div data-bind="visible: theValue.something"></div> 

編集:

あなたのシナリオの問題は、特定のユーザーが管理者になる場合、ノックアウトは、配列内の各ユーザーの個々のプロパティを追跡していないため、テンプレートをレンダリングしません。ユーザー配列を追加/削除するときにのみテンプレートをレンダリングします。

ユーザーが管理者として設定されている場合、我々はあなたが結合しているどのようなタイプのデータおよび/または値記述することができた場合は、この>

//declare the view model 
var viewModel = { 
    users: ko.observableArray(listOfUsers); //you need to pass the users list array you get from ko.mapping 
} 

//make each array member observable 
for (var i = 0; i < viewModel.users().length; i++) { 
    viewModel.users()[i] = ko.observable(users()[i]); 
} 
+0

ユーザーのリストがあり、ユーザーにIsAdminブール値フィールドが設定されている場合にボタンを表示すると、foreachテンプレート内の各アイテムをテストするための条件が必要になるため、 。 – jaffa

+0

シナリオ用にコードが追加されました – neebz

関連する問題