我正在尝试将服务器中的元素添加到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。
那么如何在没有循环的情况下连接数据。我很高兴听到为什么我的方法不起作用
答案 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)