关于基因敲除.js:为什么我不能将数据合并到基因剔除的可观察数组中

Why can not I concat data to observable array in knockout

我正在尝试将服务器中的元素添加到挖空中的可观察数组中。

这是我的ViewModel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function ArticlesViewModel() {
    var self                = this;
    this.listOfReports      = ko.observableArray([]);

    self.loadReports = function() {
        $.get('/router.php', {type: 'getReports'}, function(data){
            for (var i = 0, len = data.length; i < len; i++){
                self.listOfReports.push(data[i]);
            }
        }, 'json');
    };

    self.loadReports();
};

它运行完美。但是我知道我可以使用concat()在javascript中合并两个数组,据我所知concat在敲除中起作用。因此,当我尝试用self.listOfReports().concat(data);self.listOfReports.concat(data);代替for循环时,屏幕上没有任何显示。

在第一种情况下没有错误,在第二种错误告诉我没有方法concat。

因此,如何在没有循环的情况下合并数据。我真的很高兴听到为什么我的方法不起作用


observableArray不支持concat方法。请参阅文档以获取官方支持的数组操作方法。

但是,您可以做的是在基础数组上调用concat,然后将新的串联数组重新分配给您可观察的数组:

1
self.listOfReports(self.listOfReports().concat(data));

链接的示例有效,因为在循环中使用了self.Products().concat(self.Products2())。如果您只写self.listOfReports().concat(data);,它仍然会串联,但是您只是丢弃结果并且不将其存储在任何地方,这就是为什么您需要将其存储回observableArray的原因。


在mobx中连接数组的另一种方法:

1
2
const arr = [...self.data, ...result.data.data.customers]
self.data.replace(arr)