사용자가 마지막 행에서 타이핑을 시작할 때 테이블 끝에 새 행을 추가하려고합니다. 나는 또한 tableRow ko.dependentObservable 기능에 alert()
를 삽입 한마지막으로 편집 할 때 테이블에 새 행을 자동으로 추가합니다.
<table>
<thead>
<tr>
<th>
Number
</th>
<th>
</th>
</tr>
</thead>
<tbody data-bind="template:{name:'tableRow', foreach: tableRows}">
</tbody>
<tfoot>
<tr>
<td colspan="4">
<button type="button" data-bind="click: addNewRow">
add row
</button>
</td>
</tr>
</tfoot>
</table>
<script id="tableRow" type="text/html">
<tr>
<td>
<input type="text" style="width:40px;" data-bind="value: number, valueUpdate: 'keyup'" />
</td>
<td>
<button type="button" data-bind="click: function(){ $data.remove(); }">
delete
</button>
</td>
</tr>
</script>
:
ko.dependentObservable(function() {
alert('test');
var curval = this.number();...
그것은 것 같다 HTML 여기
function tableRow(number, ownerViewModel) {
this.number = ko.observable(number);
this.remove = function() { ownerViewModel.tableRows.destroy(this); }
ko.dependentObservable(function() {
var curval = this.number();
var rows = ownerViewModel.tableRows();
if (rows.length > 0) {
if (curval != '' && this == rows[rows.length - 1]) {
ownerViewModel.addNewRow();
}
}
}, this);
}
function tableRowsViewModel() {
var that = this;
this.tableRows = ko.observableArray([]);
this.addNewRow = function() {
this.tableRows.push(new tableRow('', that));
}
this.addNewRow();
}
$(document).ready(function() {
ko.applyBindings(new tableRowsViewModel());
});
그리고 하나 같이 뷰 모델 본다 이 함수는 tableRows 배열에 2 개의 요소가 포함 된 경우 5 번, 배열에 3 개의 요소가있는 경우 6 번 발생합니다.
내가이 일을 제대로하고 있습니까?
jsfiddle 링크에 감사드립니다. http://jsfiddle.net/rniemeyer/F5F8S/가 knockout-2.0.0으로 작동하지만 최신 knockout-2.1.0으로 작동하지 않는 이유는 무엇입니까? – MLH
계산 된 관찰 가능 항목 자체에 대한 구독을 포함하여 계산 된 관찰 가능 항목의 재평가를 허용하지 않는 2.1의 변경 사항이있었습니다. 가장 쉬운 해결책은 다음과 같이 동일한 실행 컨텍스트에 있지 않도록 행 추가를 setTimeout에 수행하는 것입니다. http://jsfiddle.net/rniemeyer/F5F8S/17/ –
Excellent! 답장을 보내 주셔서 감사합니다. – MLH