更新视图后,knockout会自动按下按钮

时间:2014-05-21 10:48:38

标签: javascript internet-explorer knockout.js

我在TR循环中有foreach绑定表:

<tbody data-bind="foreach: data">
    <tr>
        <td><input type="text" class="form-control" data-bind="value: DeviceSerialNumber" required /></td>
        <td><input type="datetime" class="form-control datepicker" placeholder="Od" data-bind="value: StartDate" required /></td>
        <td><button class="btn btn-default" data-bind='click: $root.removeRow'>Delete</button></td>
    </tr>
</tbody>

按钮绑定到此功能:

    self.removeRow = function (eq) {
        self.data.removeAll([eq]);
    };

我以这种方式添加数据:

var a = new Eq();
console.log(self);
a.StartDate(self.StartDateTemp());
a.DeviceId(self.DeviceTemp());
console.log(a);
console.log(self.data().length);
self.data.push(a);
console.log(self.data().length);

,数据是:

var ViewModel = function () {
    var self = this;
    self.DeviceTemp = ko.observable();
    self.StartDateTemp = ko.observable();
    self.data = ko.observableArray([]);
}

问题仅发生在IE10。如果我向数据数组添加任何内容,则视图已更新。在视图中,我在remove的末尾添加了is按钮绑定到tr。由于未知原因,淘汰或浏览器点击该按钮并删除新添加的行。

你能帮助我吗?

JSFIDDLE

1 个答案:

答案 0 :(得分:2)

尝试在return false之后添加self.data.push(a); self.Test("");以防止事件冒泡:

self.searchKeyboardCmd = function (data, event) {
        if (event.keyCode == 13) {
            if ((self.StartDateTemp() === undefined)
                || (self.number() != 1 && self.Test() != undefined)
                && (self.number() != 1 && self.Test() != "")) {

                alert("Bledna konfiguracja. Urzadzenia posiadajace numer seryjny nie moga byc dodane wiecej niz 1 raz")
                return true;
            }
            if (self.number() < 1 || isNaN(self.number())) {
                alert("Bledna ilosc");
                return true;
            }
            var a = new Eq();
            a.StorageId(self.StorageTemp());
            a.StartDate(self.StartDateTemp());
            a.DeviceSerialNumber(self.Test());
            a.DeviceId(self.DeviceTemp());
            a.Issue(self.Issue())
            a.IssueDesc(self.IssueDesc());
            a.Quantity(self.number());
            a.Project(self.Project());
            a.MeUser(self.MeUser());

            self.data.push(a);
            self.Test("");
            return false;
        }
        return true;
    };