敲除和可观察的阵列不匹配

 霞霞123321 发布于 2023-02-13 20:53

请考虑viewmodel中的以下属性

self.allValues = ko.observableArray();
self.selectedValues = ko.observableArray();

在编辑时,selectedValues包含来自数据库的值.这是问题所在:selectedValues包含的元素不包括在内allValues,但它们不是同一个实例.它们从属性值的角度来看是相同的,但实际上是不同的对象.

这导致每一次的淘汰赛采用indexOfallValues使用从对象selectedValues始终未能找到对象.

我使用的selectedValues一个checked结合,但是没有检查包括在该阵列上的正确元素.

是否有任何方法可以通过属性值而不是内存地址来匹配对象?

1 个回答
  • 使用自定义绑定是一种方法.这checked是使用比较函数的绑定的变体.

    ko.bindingHandlers.checkedInArray = {
        init: function (element, valueAccessor, allBindings) {
            ko.utils.registerEventHandler(element, "click", function() {
                var observable = valueAccessor(), 
                    array = observable(), 
                    checkedValue = allBindings.get('checkedValue'), 
                    isChecked = element.checked, 
                    comparer = allBindings.get('checkedComparer');
    
                for (var i = 0, n = array.length; 
                    i < n && !comparer(array[i], checkedValue); 
                    ++i) { }
    
                if (!isChecked && i < n) {
                    observable.splice(i, 1);
                } else if (isChecked && i == n) {
                    observable.push(checkedValue);
                }
            });
        },
        update: function (element, valueAccessor, allBindings) {
            var array = valueAccessor()(), 
                checkedValue = allBindings.get('checkedValue'), 
                comparer = allBindings.get('checkedComparer');
    
            for (var i = 0, n = array.length;
                i < n && !comparer(array[i], checkedValue); 
                ++i) { }
    
            element.checked = (i < n);
        }
    };
    

    jsFiddle:http://jsfiddle.net/mbest/4mET9/

    2023-02-13 20:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有