【问题标题】:Knockout Computed Observable with parameters带参数的 Knockout Computed Observable
【发布时间】:2014-06-18 06:03:42
【问题描述】:

是否可以为计算的 observable 提供额外的参数?

例如,像这样的:

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 中传递一个值,该值用作计算函数的一部分。

如果做不到这一点,有没有办法让一个接受参数的普通函数表现得像一个(计算的)可观察的?

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

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

    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>
    

    【讨论】:

    • 关闭救援!
    • 完美。如果您正在寻找 writable computed observables 以外的其他内容,请采用此解决方案。
    • 巨大的帮助!谢谢。
    【解决方案2】:

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

    你可以使用另一个 observable 作为分隔符,并在计算的 fullName 中使用这个 observable。然后 fullName 将在 firstName、separator 或 lastName 更改时更新。

    但这在原始场景中也行不通。自己找答案...

    【讨论】:

      猜你喜欢
      • 2018-05-26
      • 2017-06-04
      • 2016-08-21
      • 2017-06-21
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多