0

我见过一些人遇到类似的问题,但没有解决方案。我有一个看起来像的视图模型

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 时,模型更改正常(我在调试 DIV 中不断看到它)。当我触发 addReport 方法时,UI 会按照它的指示执行并添加一个文本框和一个选择。但是只有选择的更改实际上会更改模型 - 而不是文本框的更改!最奇怪的是,它似乎在 IE 中有效,但在 Chrome 中无效。

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

编辑 这个jsfiddle似乎瞄准了几乎完全相同的目标 - 没有我的问题。

重新加载编辑它在 Firefox 中也不起作用。但是,它似乎在 JSFiddle 中工作正常!

4

1 回答 1

0

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

于 2012-07-10T08:50:00.573 回答