2011-07-14 100 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时不显示选项时,您将获得相同的效果。该函数循环遍历所有选项,并且只包含通过检查其自己的值和索引而不显示在另一行上的选项。