Javascript ObservableArray子级可观察到的变化监视

Javascript ObservableArray子级可观察到的变化监视,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,考虑一下 我想不出一种方法来确保如果在下拉列表中已经选择了上面示例中的第一行,那么下一行将无法选择相同的值 我认为这里的问题是,当下拉单击事件触发时,订阅者不会在子值更改时监视此更改。有人能帮忙吗 viewModel.actualMetrics.subscribe(function(newValue) { if (newValue) { $.each(viewModel.actualMetrics(), function(n, item) { if

考虑一下

我想不出一种方法来确保如果在下拉列表中已经选择了上面示例中的第一行,那么下一行将无法选择相同的值

我认为这里的问题是,当下拉单击事件触发时,订阅者不会在子值更改时监视此更改。有人能帮忙吗

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

下面是一个基本示例,介绍了实现您所需的一种方法:

这是您的样品:

其基本思想是,您有自己的选择列表,然后创建一个DependentToServable,它是当前使用的选择的索引。这将在生成每行选项时,在当前选项之间节省一些循环。此索引可以是对象或数组。我使用了一个对象,但您也可以使用一个数组,并将id作为索引

然后,在每个项目上,您可以有一个dependentObservable来存储该项目的筛选选项。但是,我使用了一个函数,因为它似乎不是一个对视图模型真正重要的属性,并且绑定是使用DependentToServables实现的,因此在将其发送到JSON时,您可以在不显示选项的情况下获得相同的效果。该函数通过检查自身的值和索引,循环遍历所有选项,并仅包括未显示在另一行上的选项