声明没有值的数组属性 - knockout

时间:2014-07-08 12:47:16

标签: jquery knockout.js

http://jsfiddle.net/HXZ2u/19/

function ViewModel() {
    var self = this;
    self.products = ko.observableArray([{
        pname: '',     //Declare props. without values ??
        qty: ''
    }]);
}

该表由observableArray绑定。 单击edit将填充相应文本框中的行值。单击update将使用修改后的值更新阵列。 一切正常。就是这样,首先创建一个空行(参见小提琴)。这是因为

pname: '',qty: ''
  1. 那么,如何避免这种情况,以便表格只能包含已定义的“产品”,而不是空行。

  2. 我正在使用jquery来点击“编辑”获取行索引。如何用KO来解决这个问题。

1 个答案:

答案 0 :(得分:3)

您不需要创建第一个对象,除非您希望它在列表中。简单地省略它允许您创建没有对象的数组,然后您的其他对象将被添加到数组中。

function ViewModel() {
    var self = this;
    self.products = ko.observableArray(); // products is an empty observable Array
}

您可能遇到的错误是因为下面是您绑定到selected().pname,但selected()最初未定义。您可以将该块包装在虚拟if绑定中,以便在选择项目之前将其删除。

JSFiddle

编辑,错过了第二个问题:

要获取项目的索引,您可以使用ko.contextFor

 self.select = function(item, event){
    var context = ko.contextFor(event.target);
    alert('the ID is: ' + context.$index());
    self.selected(item);
}