【问题标题】:knockout setting computed within javascript revealing module pattern在 javascript 显示模块模式中计算的淘汰赛设置
【发布时间】:2015-12-04 01:06:47
【问题描述】:

我正在使用带有显示模块模式的淘汰赛。我想通过引用传入一个 observable,并根据计算得到它的值。这个问题是它没有通过引用传递到模式中......它似乎是通过值传递的。

listPersonClientSelect 是 observable(),我想将其传递给 js 函数并在 listPersonClientSelect 上建立计算计算(您可以在下面的代码中看到,我在 init 中将 observable 作为参数传递,我想将此可观察值设置为根据 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
        
    };

};

【问题讨论】:

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


    【解决方案1】:

    Observables 总是通过引用传递。所以init 确实收到了对原始 observable 的引用。你只需要写信给它:

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

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 2014-05-04
      • 1970-01-01
      • 2012-06-12
      相关资源
      最近更新 更多