具有参数的Knockout Computed Observable

时间:2014-06-18 06:03:42

标签: javascript knockout.js

是否可以提供计算的可观察额外参数?

例如,像这样:

var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);
    var self = this;
    this.fullName = ko.computed(function(separator) {
       return self.firstName() + ' ' + self.lastName();
    }, this);
};

然后在html:

<div data-bind="text: fullName(' - ')"></div>

我的实际用例要复杂得多,但这基本上是我想要实现的,在html中传入一个值,该值用作计算函数的一部分。

这是否有一种方法可以创建一个普通函数,它将参数表现得像一个(计算的)可观察对象?

2 个答案:

答案 0 :(得分:11)

您可以创建一个返回计算变量的函数。你可以尝试这样的事情。

var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);
    var self = this;
    this.fullName = function(separator){
    return ko.computed(function () {
            return self.firstName() + separator + self.lastName();}, this);
};
};

<div data-bind="text: ViewModel.fullName('-')"></div>

答案 1 :(得分:0)

如果viewModel相当静态,则此解决方案可能会有所帮助。但是,如果firstName例如更改后,由于fullName是没有订阅者的函数,因此不会更新fullName。

您可以对分隔符使用另一个可观察值,并在计算出的fullName中使用此可观察值。然后,当firstName,separator或lastName更改时,将更新fullName。

但这在原始方案中也不起作用。自己寻找答案...