使用"点击"在Knockout中绑定

时间:2013-10-21 17:03:50

标签: knockout.js

我是Knockout的新手,试图在Knockout中学习Click绑定。

我的示例代码是

HTML

<button data-bind="click: addEmp('fnameX', 'lnameX')">Add one more</button>
<ul data-bind="foreach: employees">
<li>
<span data-bind="text: fname"> </span> <span data-bind="text: lname"> </span>
</li>
</ul>

的JavaScript

// model
function employee(fname, lname) {
    this.fname = ko.observable(fname);
    this.lname = ko.observable(lname);
}

// view model

var vm = {
    company: ko.observable('Company Name'),
    employees: ko.observableArray(),
    addEmp: function (fname, lname) {
        this.employees.push(new employee(fname, lname));

    }
};


// adding employees to array
vm.addEmp('fname1', 'lname1');
vm.addEmp('fname2', 'lname2');


//binding
ko.applyBindings(vm);

我正在期待:

应显示2条记录,当用户点击“再添加一条”时,新记录应添加到viewmodel中,并应反映在我的视图中。

但是,实际的输出是:

最初显示3条记录,当用户点击“再添加一条”时,没有记录被添加到视图模型中,也没有反映在视图中。

JSFiddle链接:http://jsfiddle.net/Rama_Kishore/AGycj/

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

Knockout将一些上下文参数传递给使用click绑定调用的函数,因此您的参数会让人感到困惑。为了在绑定中直接调用带参数的函数,将其包装在外部函数中,如下所示:

<button data-bind="click: function() { addEmp('fnameX', 'lnameX') }">Add one more</button>

jsfiddle

修改:淘汰文档here在“备注2”下的第二个代码示例中解释了这一点