在javascript揭示模块模式

时间:2015-12-04 01:06:47

标签: javascript knockout.js knockout-3.0 revealing-module-pattern

我正在使用基于揭示模块模式的淘汰赛。我希望通过引用传递一个可观察的内容并使其具有'基于计算的值。这个问题是没有通过引用传递给模式......似乎它是通过值传递的。

listPersonClientSelect是observable(),我希望将它传递给js函数并在listPersonClientSelect上建立计算计算(你可以在下面的代码中看到我在observable中传递作为init中的参数而我想要根据select2Data()

中的更改将此可观察值设置为计算值

使用以下函数调用init函数....所以最终结果是什么

self.assigneePersonSetupKO.listPersonClientSetup确实显示了计算结果但是我真正想要的是self.assignees()来显示更改(计算的值)

是否可以通过引用将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
        
    };

};




1 个答案:

答案 0 :(得分:0)

Observable总是通过引用传递。所以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);
});