Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Knockout Computed Observable with parameters

Is it possible to provide a computed observable an extra parameter?

For example, something like this:

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);
};

And then in the html:

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

My actual use case is far more complicated, but this is essentially what I'm trying to achieve, pass in a value in the html which is used as part of the computed function.

Failing this is there a way to make a ordinary function which takes parameters behave like a (computed) observable?

like image 509
ioseph Avatar asked Jun 18 '14 06:06

ioseph


1 Answers

You can create a function, which returns an computed variable. You can try something like this.

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>
like image 138
Anuraj Avatar answered Nov 16 '22 02:11

Anuraj