为什么我不能在knockout中将数据连接到可观察数组

时间:2014-02-21 09:56:35

标签: knockout.js ko.observablearray

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

这是我的ViewModel:

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 works in knockout。因此,当我尝试使用self.listOfReports().concat(data);self.listOfReports.concat(data);替换for循环时,屏幕上不会显示任何内容。

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

那么如何在没有循环的情况下连接数据。我很高兴听到为什么我的方法不起作用

2 个答案:

答案 0 :(得分:12)

observableArray 不支持支持concat方法。请参阅官方支持的array manipulation methods文档。

但是,您可以做的是在底层数组上调用concat,然后将新的连接数组重新分配给您的observable:

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

linked example有效,因为self.Products().concat(self.Products2())在循环中使用。如果你只是写self.listOfReports().concat(data);它仍然连接,但你只是抛弃结果并且不将它存储在任何地方,这就是你需要将它存储回observableArray的原因。

答案 1 :(得分:0)

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

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