【问题标题】:Using "click" binding in Knockout [duplicate]在淘汰赛中使用“点击”绑定[重复]
【发布时间】:2013-10-22 01:10:23
【问题描述】:

我是 Knockout 的新手,正在尝试学习 Knockout 中的点击绑定。

我的示例代码是

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条记录,当用户点击“Add one more”时,一条新记录应该被添加到viewmodel,它应该会反映在我的视图中。

但是,实际的输出是:

最初显示 3 条记录,当用户单击“再添加一条”时,没有记录被添加到 viewmodel 中,并且没有反映在视图中。

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

感谢您的帮助。

【问题讨论】:

  • 您是否在控制台中遇到任何错误?
  • 不,我没有收到任何错误?

标签: knockout.js


【解决方案1】:

Knockout 将一些上下文参数传递给使用点击绑定调用的函数,因此您的参数会混淆它。为了直接在绑定中调用带参数的函数,请将其包装在外部函数中,如下所示:

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

jsfiddle

编辑:淘汰文档here在“注释2”下的第二个代码示例中对此进行了解释

【讨论】:

  • 是的!它现在工作!谢谢。
  • @user2693545 太好了!不要忘记将答案标记为已接受,因此它会从未回答列表中退出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多