2011-07-14 13 views
0

this jsfiddleを検討してください。ObservableArray子観測可能な変更監視

上記の例の行1が既にドロップダウンで選択されていて、次の行が同じ値を選択できないようにする方法は考えられません。

ここでの問題は、ドロップダウンクリックイベントが発生したときに、子値が変更されたときにサブスクライバがこの変更を監視しないことです。誰でも手助けできますか?ここで

viewModel.actualMetrics.subscribe(function(newValue) { 
    if (newValue) { 
     $.each(viewModel.actualMetrics(), function(n, item) { 
      if (item.MetricTypeId() == newValue.MetricTypeId) 
       alert("already selected this Metric"); 
     }); 
    } 

答えて

0

は、あなたが欲しいものを行うための一つの方法の基本的なサンプルです:ここではhttp://jsfiddle.net/rniemeyer/3cpUp/

はそれであなたのサンプルです:http://jsfiddle.net/rniemeyer/8bQmq/

基本的な考え方は、あなたが選択肢のリストを持っていることをされ、現在使用されている選択肢のインデックスであるdependentObservableを作成します。これにより、各行オプションを構築する際に現在の選択肢をループすることがなくなります。このインデックスはオブジェクトまたは配列です。私はオブジェクトを使用しましたが、idをインデックスとして配列を使用することもできます。

次に、各アイテムに、そのアイテムのフィルタ処理された選択肢を格納するdependentObservableを持たせることができます。しかし、代わりに関数を使用しました。ビューモデルにとって本当に重要なプロパティのようではなく、バインディングはdependentObservablesを使用して実装されています.JSONに送信するときに選択肢を表示しなくても同じ効果が得られます。この関数はすべての選択肢をループし、別の行には表示されない選択肢だけを、独自の値と索引をチェックすることで組み込みます。

関連する問題