ObservableArray子可观察对象变化监控

ObservableArray child observable change monitoring

本文关键字:变化 监控 对象 观察 ObservableArray      更新时间:2023-09-26

考虑这个jsfield

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

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

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

下面是一个基本的示例,可以实现您想要的功能:http://jsfiddle.net/rniemeyer/3cpUp/

这是您的样品:http://jsfiddle.net/rniemeyer/8bQmq/

基本思想是,你有一个选择列表,然后你创建一个dependentObservable,它是当前使用的选择的索引。这节省了在构建每行选项时遍历当前选项的一些循环。这个索引可以是一个对象或数组。我使用了一个对象,但您也可以使用一个数组,将id作为索引。

然后,在每个项目上,您可以有一个dependentObservable来存储该项目的筛选选项。但是,我使用了一个函数,因为它看起来不像是一个对视图模型真正重要的属性,并且绑定是使用dependentObservables实现的,所以当您将其发送到json时,您可以获得相同的效果,而无需显示选择。该函数循环遍历所有的选项,并通过检查自己的值和索引,只包括没有出现在另一行的选项。