2011-07-14 98 views
0

考慮this jsfiddleObservableArray子可觀察變化監測

我想不出如何確保如果在下拉列表中選擇了第一行,下一行將被阻止選擇相同的值。

我認爲我的問題在於,當下拉單擊事件觸發時,用戶不會在孩子值發生變化時監視此更改。任何人都可以協助?

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時不顯示選項時,您將獲得相同的效果。該函數循環遍歷所有選項,並且只包含通過檢查其自己的值和索引而不顯示在另一行上的選項。