我看到有些人有类似的问题,但没有解决方案可行。我有一个看起来像
的viewmodelvar 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中运行正常!
答案 0 :(得分:0)
我的道歉 - 杰夫对没有复制足够代码的分析是正确的(这里复制太多了!) 无论如何,我的错误是在我的代码深处(甚至在Knockout进入图片之前),我处理了“更改”事件以了解表单何时变脏 - 从而劫持对Knockout业务很重要的事件! 请注意,其他人可能会想到同样的解决方案! 我看到RP Niemeyer解决了问题here。