녹아웃 관측 가능 배열에 연결되는 개체 배열이 있습니다. 이 배열에 정렬을 적용 할 필요가 있었고 조금 혼란스러운 행동이있었습니다.정렬 및 Foreach 데이터 바인딩이있는 녹아웃 관찰 가능 배열
첫 번째 시도는 foreach 데이터 바인딩에 정렬을 적용하는 것과 관련이 있습니다.
http://jsfiddle.net/wnfXV/
<ul data-bind="foreach: people.sort(function(l,r) { return l.name == r.name ? 0 : (l.name < r.name ? -1 : 1)})">
이 적절한 정렬을 수행하지만 동적으로 추가/배열에서 요소를 제거하고 DOM 업데이트를 할 수있는 능력을 잃게
.기본 JavaScript 배열에 액세스하기 위해 괄호 세트를 추가하면 모든 것이 잘 동작합니다. 내가 찾은 일부 SO 답변을 바탕으로
<ul data-bind="foreach: people().sort(function(l,r) { return l.name == r.name ? 0 : (l.name < r.name ? -1 : 1)})">
self.sortedPeople = ko.computed(function() {
return self.people().sort(function(l,r) {
return l.name == r.name ? 0 : (l.name < r.name ? -1 : 1);
});
});
이것은 또한 작동합니다. 그리고 나는 즉시 실행되기 때문에 계산 된 관찰 가능에 데이터 바인딩 할 필요조차 없습니다. 배열 항목 및 DOM 업데이트를 적절히 푸시 및 제거 할 수 있습니다. 나는에 코드를 변경하는 경우
그러나 : 이제
self.sortedPeople = ko.computed(function() {
return self.people.sort(function(l,r) {
return l.name == r.name ? 0 : (l.name < r.name ? -1 : 1);
});
});
, 나는 어레이와 DOM 업데이트 항목을 밀어 수 있어요,하지만 데이터 정렬되지 않습니다.
이 차이점은 녹아웃 종속성 추적과 관측 가능한 배열에서 작동하는 것과 기본 JavaScript 배열에서의 차이점과 관련이 있다고 생각합니다. 그러나 동작이 왜 변하는지를 개념화하는 데 어려움을 겪고 있습니다. 나는 그것을 작동시킬 수 있지만, 모범 사례로 간주되는 것에 대해서도 궁금합니다.
도움 주셔서 감사합니다. :)
그것은 수 있습니다 단지 계산 된 값을 사용하는 대신 관찰 가능한 배열에 구독합니다. 당신은 기본적으로 그 계산을 계산 구독에 사용하고 있습니다. http://jsfiddle.net/N9sGY/ – LameCoder
예, 항목이 추가되었지만 사용되지 않은 마지막 예를 설명합니다. 감사. 푸시/제거 기능이 첫 번째 바이올린에서 작동하지 않는 이유, 또는 괄호를 추가하면 왜 수정됩니까? – ecozoic
첫 번째 피들에서는 기본적으로 같은 것입니다. 괄호를 사용하지 않으므로 구독이 이루어지지 않습니다. people.sort를 수행하면 기본적으로 변경 사항을 구독하는 메커니즘이 단락됩니다. – LameCoder