[追加] リンクがクリックされ、別のテキスト ボックスが以下の HTML に追加されるたびに、ViewModel を更新しようとしています。
<a href="" data-bind="click: addItem">[add]</a>
<div id="items">
<input class="item" type="text" data-bind="value: searchRequest.Items[0].ItemName"/>
</div>
私のViewModelは次のようになります:
$(function () {
var ViewModel = function() {
var self = this;
this.searchRequest = {
Items: [{
ItemName: ko.observable("")
}]
};
this.addItems = function() {
var htmlToInsert = '<input class="items" type="text" data-bind="value: searchRequest.Items[' + self.searchRequest.Items.length.toString() + '].ItemName"/>';
$(htmlToInsert).insertAfter('.item');
self.searchRequest.Items.push({
ItemName: ko.observable(""),
});
ko.applyBindings(self, document.getElementById("items"));
}
}
});
したがって、[追加] リンクがクリックされるたびに作成される ViewModel の別のコピーを除いて、基本的には正常に動作します。これにより、テキストボックスが複製されます。そのため、テキスト ボックスが 2 つあるときに [追加] をクリックすると、テキスト ボックスが 1 つではなく 2 つ追加されます。そのため、3 つではなく 4 つのテキストボックスが表示されます。もう一度 [追加] をクリックすると、さらに 4 つのテキストボックスが表示されます。新しく表示されたテキストボックスのいずれかに値を入力すると、それとともに表示された他のテキストボックスに反映されます。基本的に、addItems 関数は各 ViewModel によって呼び出され、複数のテキスト ボックスが追加されます。コメントしてみた
ko.applyBindings(self, document.getElementById("items"));
アウトしましたが、役に立ちませんでした。
どうすればこれを修正できますか?
よろしくお願いします。