GrahamTheDev
GrahamTheDev

Reputation: 24905

knockout cant process click binding as not a function

I am struggling calling a function with knockout!

var bankViewModel = function () {
    self.addBank = function(){
                return function(){
                    self.addShow(true);
                    var bank = new observableBank('',"","","","","","","","","Active");
                    self.newBank(bank);
                };
        };
};

var bankViewModelInstance = new bankViewModel();
ko.applyBindings(bankViewModelInstance, document.getElementById("company-info-bank"));

and in the view I have tried loads of variations of binding with:-

<button id="demo-btn-addrow" class="btn btn-purple btn-labeled fa fa-plus" data-bind="click: addBank()">Add New</button>

tried $parent (undefined), $data - does nothing etc.

Can someone tell me what silly mistake I am making?

Thanks

Upvotes: 0

Views: 79

Answers (1)

super cool
super cool

Reputation: 6045

Tough your code works well check here .

couple of corrections/Improvements :

  • you can use data-bind="click: addBank" no need to bind with addBank() inside click function which make click fire onLoad .
  • Click function logic in viewModel you don't need to return a function()

viewModel:

var bankViewModel = function () {
    var self = this;
    self.newBank = ko.observableArray();
    self.addShow = ko.observable();
    self.addBank = function () {
        self.addShow(true);
        /*                    var bank = new observableBank('',"","","","","","","","","Active"); */
        self.newBank.push(1); //for testing

    };
};

var bankViewModelInstance = new bankViewModel();
ko.applyBindings(bankViewModelInstance);

sample working fiddler here

Upvotes: 2

Related Questions