배열을 제거했지만 UI 서식을 지정할 항목 수를 세고 있습니다. 바인딩 업데이트를 할 수 있어야합니다.녹아웃 바인딩
ko.applyBindings(viewModel);
getFoos();
var viewModel = {
foos: ko.observableArray([]),
reloadFoos: function() {
getFoos();
},
removeFoo: function() {
remove(this);
}
};
var foo = function() {
this.Id = ko.observable();
this.Name = ko.observable();
this.Count = ko.observable();
};
function remove(foo) {
viewModel.foos.splice(viewModel.foos.indexOf(foo), 1);
viewModel.foos.each(function(index) {
viewModel.foos[index].Count = index%10 == 0;
});
}
function getFoos() {
viewModel.foos([]);
$.get("/myroute/", "", function (data) {
for (var i = 0; i < data.length; i++) {
var f = new foo();
f.Id = data[i];
f.Name = data[i];
f.Count = i%10 == 0;
viewModel.foos.push(f);
}
});
}
<div data-bind="foreach: foos">
<div style="float: left">
<a href="javascript:void(0);" data-bind="click : $parent.removeFoo, attr: { id: Id }">
<label data-bind="value: Name"></label>
</a>
</div>
<!-- ko if: Count -->
<div style="clear: left"></div>
<!-- /ko -->
</div>
클릭 이벤트가 발생하면 항목이 배열에서 제거되지만 if 바인드가 업데이트되지 않고 ui 서식이 해제됩니다. ui 블록을 제거하고 다시로드 할 때 ui 블록이 튀어서 데이터를 다시로드하지 못하게하려고합니다.
코드에 성능 문제가있을 것입니다. getFoos 내에서 관찰 가능한 배열을 삭제하면 루프 내에서 항목을 1만큼 관찰 가능한 배열에 푸시합니다. 데이터에 항목이 100 개있는 경우 관찰 가능 어레이에서 101 번 업데이트를 실행합니다. 일반적인 자바 스크립트 배열처럼 배열을 만든 다음, 관찰 가능한 배열을 끝에 구축 한 배열로 설정해야합니다. 관찰 가능 어레이의 업데이트는 한 번만 발생합니다. – Arbiter
많은 항목을 예상하지는 않지만 정보를 제공해 주셔서 감사합니다. – Suedeuno
두 줄로 수정되었으므로 수정해야 할 가치가 있습니다. 특히 관찰 가능한 배열에 많은 구독자가있는 경우 특히 그렇습니다. 나는 IE8과 9가 그것을 막는 것을 보았다. – Arbiter