javascript - 从多个来源到单个列表的 knockout 映射而不删除未列出的项目

标签 javascript knockout.js knockout-mapping-plugin

我有两个数据列表,想将它们合并到一个带有 knockout 映射的列表中。

如果我定义一个要比较的键,这似乎工作正常,除了它删除了最近更新中未列出的项目。

有没有一种方法可以使用 KO 映射到数组,而无需删除最新列表中未出现的项目?

下面的 EG,应该产生:

  • 1 A B
  • 2 AA BB
  • 3AAA
  • 4BB

不是

  • 1 A B
  • 2 AA BB
  • 4BB


    <ul data-bind='foreach: mergedList'>
        <li>
            <span data-bind='text: id'></span>
            <span data-bind='text: a'></span>
            <span data-bind='text: b'></span>
        </li>
    </ul>

    var listA = [
        { id: 1, a: 'A'},
        { id: 2, a: 'AA'},
        { id: 3, a: 'AAA'}
    ];
    var listB = [
        { id: 1, b: 'B'},
        { id: 2, b: 'BB'},
        { id: 4, b: 'BBB'}
    ];

    var mapping = {
        key: function(data) {
            return ko.utils.unwrapObservable(data.id);
        },
        create: function (options){
            var model = new subViewModel();
            ko.mapping.fromJS(options.data, {}, model);
            return model;
        }
    }

    var subViewModel = function(){
        var self = this;
        self.a = ko.observable();
        self.b = ko.observable();
    }

    var viewModel = function(){
        var self = this;
        self.mergedList = ko.observableArray();
    }

    var vm = new viewModel();
    ko.mapping.fromJS(listA, mapping, vm.mergedList);
    ko.mapping.fromJS(listB, mapping, vm.mergedList);
    ko.applyBindings(vm);

http://jsfiddle.net/BQRur/9/

最佳答案

我知道这个问题已经很老了,所以这可能对卢克没有帮助,但它可能会帮助其他从谷歌来到这里的人(比如我)。 最近遇到了类似的问题,在knockout论坛求助: https://groups.google.com/forum/#!topic/knockoutjs/22DzjfgUzMs

祝你好运!

关于javascript - 从多个来源到单个列表的 knockout 映射而不删除未列出的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17872539/

相关文章:

jquery - 迁移到knockout.js

javascript - 添加动态复选框并用于在 knockout 中显示和隐藏内容

javascript - Knockoutjs 跟踪 ajax 调用后的变化

javascript - 在 css 中对齐三个框

javascript - 是否可以在 ES6 类的静态方法中访问变量和函数?

knockout.js - 在 foreach 完成渲染后,knockoutJS 执行回调

javascript - 使用 Knockout 检查是否未定义

knockout.js - Knockout isDirty 示例,使用映射插件中的动态 View 模块

javascript - Vue 中观察者上的 "deep"标志的用途是什么?

javascript - 有没有办法直接在 Angularjs 中与 Controller 和范围进行交互?