foreach中的输入框在敲除时没有正确绑定,仅在IE中

时间:2012-07-06 08:56:57

标签: foreach knockout.js

我看到有些人有类似的问题,但没有解决方案可行。我有一个看起来像

的viewmodel
var House = function() {
    this.houseName = ko.observable("");
    this.reports = ko.observableArray([]);

    this.addReport = function() { this.reports.push(new Report) }.bind(this);
}

和“报告”被填充 - 在House.addReport() - 与

var Report = function() {
     this.reportname = ko.observable("");
     this.sensor_id = ko.observable(0);
}

HTML看起来像(简化)

<input type="text" data-bind="value: houseName">
<div data-bind="foreach: reports">
    <input type="text" data-bind="value: reportname"><select data-bind="value: sensor_id" />
</div>

所以,问题。当我在foreach之外填写houseName时,模型会改变OK(我在调试DIV中不断看到它)。当我触发addReport方法时,UI会按照它的方式执行操作并添加文本框和选择。但是只有选择的更改实际上会改变模型 - 而不是更改文本框!最奇怪的是,它似乎适用于IE浏览器,但不适用于Chrome。

很可能是我错过了IE的幕后处理 - 但这是什么错误?

修改 这个jsfiddle似乎的目标几乎完全相同 - 没有我的问题。

重新加载EDIT 它在Firefox中也不起作用。但是,它似乎在JSFiddle中运行正常!

1 个答案:

答案 0 :(得分:0)

我的道歉 - 杰夫对没有复制足够代码的分析是正确的(这里复制太多了!) 无论如何,我的错误是在我的代码深处(甚至在Knockout进入图片之前),我处理了“更改”事件以了解表单何时变脏 - 从而劫持对Knockout业务很重要的事件! 请注意,其他人可能会想到同样的解决方案! 我看到RP Niemeyer解决了问题here