[javascript] Knockout.js에서 사용되는 멀티 선택 및 필터링 방법은?

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입니다. filteredItemsko.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 공식 홈페이지