Knockout.js는 웹 애플리케이션에서 데이터와 UI를 동적으로 결합하기 위해 사용되는 JavaScript 라이브러리입니다. Knockout.js를 사용하여 멀티 선택과 필터링을 구현하는 방법에 대해 살펴보겠습니다.
멀티 선택 구현하기
Knockout.js에서 멀티 선택을 구현하기 위해서는 ko.observableArray
를 사용합니다. 이를 통해 배열에 여러 개의 선택 항목을 저장하고 관리할 수 있습니다.
var viewModel = {
selectedItems: ko.observableArray([]),
availableItems: [
{ id: 1, name: '항목 1' },
{ id: 2, name: '항목 2' },
{ id: 3, name: '항목 3' },
// 추가적인 항목들...
]
};
ko.applyBindings(viewModel);
위의 예제에서 selectedItems
는 사용자가 선택한 멀티 항목을 저장하는 배열입니다. availableItems
는 사용자가 선택할 수 있는 모든 항목들을 가지고 있는 배열입니다.
<select multiple="multiple" data-bind="options: availableItems, selectedOptions: selectedItems"></select>
위의 예제에서 multiple
속성을 사용하여 멀티 선택을 가능하게 설정하고, options
바인딩을 통해 availableItems
배열을 옵션으로 사용합니다. 마지막으로, selectedOptions
바인딩을 통해 사용자가 선택한 항목들을 selectedItems
배열에 바인딩합니다.
필터링 구현하기
Knockout.js에서 필터링을 구현하기 위해서는 ko.computed
를 사용합니다. 이를 통해 데이터의 일부만 보여주거나, 특정 조건에 따라 데이터를 필터링하여 표시할 수 있습니다.
var viewModel = {
items: [
{ id: 1, name: '항목 1' },
{ id: 2, name: '항목 2' },
{ id: 3, name: '항목 3' },
// 추가적인 항목들...
],
filterText: ko.observable('')
};
viewModel.filteredItems = ko.computed(function() {
var filter = viewModel.filterText().toLowerCase();
if (!filter) {
return viewModel.items;
} else {
return ko.utils.arrayFilter(viewModel.items, function(item) {
return item.name.toLowerCase().indexOf(filter) !== -1;
});
}
});
ko.applyBindings(viewModel);
위의 예제에서 items
는 전체 아이템들을 저장하는 배열입니다. filterText
는 사용자가 입력한 필터링 텍스트를 저장하는 observable입니다. filteredItems
는 ko.computed
를 사용하여 필터링된 아이템들을 반환하는 함수입니다.
<input type="text" data-bind="value: filterText, valueUpdate: 'afterkeydown'" placeholder="필터링할 텍스트를 입력하세요." />
<ul data-bind="foreach: filteredItems">
<li data-bind="text: name"></li>
</ul>
위의 예제에서는 input
요소의 value
속성에 filterText
를 바인딩하여 사용자의 입력을 저장하고, valueUpdate
속성을 사용하여 실시간으로 필터링을 적용하도록 설정합니다. 마지막으로, ul
요소의 foreach
바인딩을 통해 filteredItems
배열을 순회하여 필터링된 항목들을 표시합니다.
이렇게 Knockout.js를 사용하여 멀티 선택 및 필터링을 구현할 수 있습니다. 더 자세한 내용은 Knockout.js의 공식 문서를 참고하시기 바랍니다.
참고 문서: Knockout.js 공식 홈페이지