是否可以提供计算的可观察额外参数?
例如,像这样:
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中传入一个值,该值用作计算函数的一部分。
这是否有一种方法可以创建一个普通函数,它将参数表现得像一个(计算的)可观察对象?
答案 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。
但这在原始方案中也不起作用。自己寻找答案...