将ko.computed Array映射为observableArray

KnockoutJS Mapping ko.computed Array into observableArray

本文关键字:observableArray 映射 Array ko computed      更新时间:2023-09-26

如问题所述,我试图使数组结果从ko.computed到可观察数组。我这样做的原因是,我想让我的数组结果中的所有对象是"可观察的"和解决方案,我试图找出是通过转移数组结果到不同的observableArray。我不能解释清楚,所以这里是我的代码(见注释行进一步解释):

//to make each objects observable
var DropDownHolder = function (itemID, itemName, amount, automatic) {
    var self = this;
    self.ID = ko.observable(deductionID);
    self.Name = ko.observable(deductionName);
    self.amount = ko.observable(amount);
    self.automatic = ko.observable(automatic);
};
//temporary list, creates a new filtered array -- no problem here
self.temporaryDropDown = ko.computed(function () {
    return ko.utils.arrayFilter(self.completeList(), function (completeItem) {
        var sameItem = false;
        ko.utils.arrayForEach(self.selectedItem(), function (pickedItem) {
            if (pickedItem.itemID() == completeItem.itemID()) {
                sameItem = true;
                return;
            }
        });
        return !sameItem;
    });
}, self);
//put unpicked in dropdown -- problem here
//cannot transfer contents of temporaryDropDown to DropDown
self.DropDown = ko.observableArray();
self.DropDown(ko.utils.arrayMap(self.temporaryDropDown(), function (dd) {
    return new DropDownHolder(dd.itemID, dd.itemName, dd.amount, dd.automatic);
}));

你的代码看起来很好,应该没问题

我相信temporaryDropDown是被计算出来的东西使它开火两次,即初始加载,然后获得[],然后获得实际数据。

查找应该触发多次的计算方法