在javascript显示模块模式中计算的淘汰设置

knockout setting computed within javascript revealing module pattern

本文关键字:计算 淘汰 设置 模式 javascript 显示 模块      更新时间:2023-09-26

我正在使用带有揭示模块模式的敲除。我想通过引用传递一个可观察的值,并使其值基于计算值。这个问题是它没有通过引用传递到模式中。。。它似乎被价值所传递。

listPersonClientSelect是observable(),我想将其传递到一个js函数中,并在listPersonClientSelect上建立一个计算结果(你可以在下面的代码中看到,我将observable作为参数传递到init中,我想根据select2Data()中的变化将这个observable值设置为计算值

init函数是用以下…调用的。。。。那么最终的结果是什么

self.assigneePersonSetupKO.listPersonClientSetup确实显示了计算的结果,但我真正想要的是self.assign()来显示的变化(计算的值)

是否可以通过引用将self.assignees传递到js中

self.assigneePersonSetupKO = new PersonSetupKO();
self.assigneePersonSetupKO.init(self.assignees);

var PersonSetupKO = function () {
    "use strict";
    
    //var self = this;
    var select2Data = ko.observable(''),
        initialOptions = [],
        initialSelectedOptions = [],        
        listPersonClientSelect = ko.observable(),
        init = function (listPersonClientSelect) {
            this.initialOptions = $.map(listPersonClientSelect(), function (item) {
                return { DisplayName: item.DisplayName(), Gen: item.Id() }
            });
            this.initialSelectedOptions = $.map(listPersonClientSelect(), function (item) {
                return item.Gen();
            });
            this.select2Data($.map(listPersonClientSelect(), function (item) {
                return { text: item.DisplayName(), id: item.Id() };
            }));
            
            this.listPersonClientSelect = ko.computed(function () {
                var results = $.map(select2Data(), function (item) {
                    return {
                        DisplayName: ko.observable(item.text),
                        Id: ko.observable(item.id)
                    }
                });
                return results;
            });
        };
    return {       
        init: init,
        select2Data: select2Data,
        initialOptions: initialOptions,
        initialSelectedOptions: initialSelectedOptions,
        listPersonClientSelect: listPersonClientSelect
        
    };
};

可观测值总是通过引用传递的。因此init确实接收到对原始可观测到的参考。你只需要写信给它:

this.updateListPersonClientSelect = ko.computed(function () {
    var results = $.map(select2Data(), function (item) {
        return {
            DisplayName: ko.observable(item.text),
            Id: ko.observable(item.id)
        }
    });
    listPersonClientSelect(results);
});