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は、ほぼ同じ目標を目指しているようです-私の問題はありません。

EDIT reloaded Firefoxでも動作しません。しかし、JSFiddle では問題なく動作するようです。

4

1 に答える 1

0

私の謝罪 - 十分なコードを再現していないというジェフの分析は正しかったです (ここで再現するには多すぎるでしょう!) とにかく、私のエラーは私のコードの奥深くにありました (Knockout が写真に登場する前でさえも)、私は " change" イベントを使用して、フォームがいつ汚れていたかを知ることができます。これにより、Knockout のビジネスにとって重要なイベントがハイジャックされます。同じ解決策を考えるかもしれない他の人に注意してください! RP Niemeyer がここで問題に取り組んでいるようです。

于 2012-07-10T08:50:00.573 に答える