繁体   English   中英

Knockout.js:函数参数未定义

[英]Knockout.js: Function parameter undefined

我有一个非常简单的示例,无法正常工作。

jsfiddle: http : //jsfiddle.net/ThomasDeutsch/8hzhp/3/

// My Model
function Customer(id, name, lastname) {
    this.Id = ko.observable(id);
    this.Name = ko.observable(name);
    this.LastName = ko.observable(lastname);
}

// My ViewModel
ViewModel = (function () {
    var getName = ko.computed(function (x) {
        return x.Name();
    });

    return {
        getName: getName(new Customer(1, "Thomas", "D"))
    };
})();

ko.applyBindings(ViewModel);​

问题:参数(x)未定义

目标:返回被调用对象的名称属性-我想将x用作属性,以便我可以对具有可观察名称属性的任何对象调用此函数

代码说明:这是通过使用带有tickout.js的揭示模块模式来完成的。 名称属性是ko.observable()-因此需要()。

问题 :为什么x未定义?

让我问问你。 您认为x在哪里定义?

您正在调用getName并传递一个Customer,但是getName不需要参数。

如果您这样重写函数,它将起作用:

var getName = function(x) { return ko.computed( function() {
    return x.Name();
})};

您试图更改可观察的“ getName”的值,但是由于它是计算值,因此在您指定应如何处理之前,这是未定义的行为。

我认为最好的解决方案是引入另一个可观察到的存储客户的数据。

var ViewModel = (function() {
    // Observable for the customer
    var customer = ko.observable(new Customer(1, "Thomas", "D"));

    // The computed observable, using the other one
    var getName = ko.computed(function() {
        return customer().Name();
    });

    // If you only need to access the name, its sufficient
    // to export only that observable. However, this is still
    // read-only.
    return {
        getName: getName
    };
})();

如果要使其可写,则可以为计算出的可观察对象定义一个setter:

var getName = ko.computed({
    read: function() {
        return customer().Name();
    },
    write: function(n) {
        customer().Name(n);
    }
});

(不是一个最有意义的示例,但这是因为您在这里实际上不需要计算的可观察量)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM