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

6bc51xsx  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(125)

我正在尝试将服务器中的元素添加到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()concat works in knockout在javascript中合并两个数组,所以当我尝试用self.listOfReports().concat(data);self.listOfReports.concat(data);替换我的for循环时,屏幕上什么也没有出现。
在第一种情况下没有错误,在第二种情况下错误告诉我没有方法concat。
那么,没有循环,我怎么能对数据进行concat呢?如果我能听到为什么我的方法不起作用,我会非常高兴

s4n0splo

s4n0splo1#

observableArray支援concat方法。请参阅文件以取得正式支援的数组操作方法。
然而,你可以做的是在底层数组上调用concat,然后将这个新的连接数组重新分配给你的观察对象:

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

linked example的作用是因为self.Products().concat(self.Products2())在循环中使用。如果你只写self.listOfReports().concat(data);,它仍然是连接的,但你只是丢弃了结果,没有把它存储在任何地方,这就是为什么你需要把它存储回observableArray。

plicqrtu

plicqrtu2#

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

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

相关问题