向KO传递在对象内可观察到的计算值

Passing values to KO computed observable within an object

本文关键字:观察 计算 KO 对象      更新时间:2023-09-26

尝试使用javascript将值公开给对象中对象内可观察到的KO计算值。我目前在页面上看到"未定义"。。。

    function Employee () {            
        var self = this;
        self.identity = ko.observable({
            employeeTitle: ko.observable(""),
            titles: ko.observableArray(['Mr','Mrs','Ms']),
            givenName: ko.observable(""),
            lastName: ko.observable(""),
            otherNames: ko.observable(""),
            fullName: ko.computed(function(givenName,lastName){
                return givenName + " " + lastName;
            })
        });
           //rest of object
  )};

已经尝试了各种选择,而且越来越接近了——有什么想法吗?

function(givenName(), lastName()) { ... }

产生"意外令牌("

请参阅以下jsFiddle:http://jsfiddle.net/JD7fL/.

ko.computed的函数自变量不需要将givenNamefirstName作为自变量。您可以简单地引用要在计算函数中使用的字段。但是,因为对象中有fullName,而不是构造函数,所以不能引用这些字段。我将self.identity拆分为一个新的Identity构造函数。

意外的令牌错误是由于Employee末尾的一个不正当的关闭paren导致的。

JavaScript

function Employee () {            
    var self = this;
    self.identity = ko.observable(new Identity());
};
function Identity() {
    var self = this;
    self.employeeTitle = ko.observable("");
    self.titles = ko.observableArray(['Mr','Mrs','Ms']);
    self.givenName = ko.observable("John");
    self.lastName = ko.observable("Doe");
    self.otherNames = ko.observable("");
    self.fullName = ko.computed(function(){
        return self.givenName() + " " + self.lastName();
    });
}
ko.applyBindings(new Employee());

HTML

<div data-bind="with: identity">
    <div data-bind="text: fullName"></div>
</div>