将项添加到Observable Array Knockout

时间:2013-10-30 17:07:14

标签: javascript arrays mvvm knockout.js

我有3个Observable Arrays:

self.sets1 = ko.observableArray([
    ]);
self.sets2 = ko.observableArray([
    ]);
self.sets3 = ko.observableArray([
    ]);

我有一个构造函数来创建新记录。

function Record(name1){
    var self = this;
    self.name = ko.observable(name1);
    this.editing = ko.observable(false);
    this.edit = function() { this.editing(true) }
    self.remove = function(){
        self.remove(this);
    }

}

我有一个函数可以将记录添加到我的一个可观察数组中。 像这样:

this.addSet = function(){
        self.sets1.push(new Record($('input[id=weight1]').val()+' x '+$('input[id=reps1]').val()));
    };

在我看来,我称之为:

<button id="btn1" data-bind="click: addSet">Add set</button>

但这仅适用于可观察数组sets1

我想要的是使这个函数具有通用性,因此它可以向任何数组添加记录,例如,取决于被点击的id的{​​{1}}。 但是如何获得所需的button并将此值传递给我的函数? 或者可能有更好的解决方案?

感谢。

1 个答案:

答案 0 :(得分:1)

Knockout event bindings(如点击)提供了两个您可能会觉得有用的参数。

function(data, event)

此处,data是与引发事件的元素关联的knockout对象。 event是包含有关事件的数据的事件对象。 event.target是对引发事件的html元素的引用。

因此,要查找单击按钮的ID,请执行以下操作:

this.addSet = function(record, event){
    var id = $(event.target).attr('id');
    ...
};