녹아웃 및 선택기와 관련된 어레이 필터링 문제

Asle G

에 표시하는 텍스트 배열이 <select>있습니다.

텍스트는 버전 번호가 다를 수 있으며 <select>최신 버전만을 기준으로 필터링하고 싶습니다 .

더 우아한 방법이 있다고 생각합니다 (제안 환영합니다) <select>. 체크 박스에 따라 2 초를 다른 가시성으로 설정하도록 선택했습니다.

코드는 해킹이지만 결과는 꽤 좋아 보입니다. 불행히도 버그가 있습니다.

각 배열에서 선택한 옵션을 나타내는 두 개의 관찰 가능 항목이 있습니다.

self.SelectedText = ko.observable();
self.SelectedUnique = ko.observable();

둘 다 구독이 있지만 두 구독에서 함께 연결할 수 없으므로 다음과 같이 하나를 다른 구독자로 선택했습니다.

self.SelectedUnique.subscribe(function (text) {
    if (text) {
        self.SelectedText(text);
    }
});

그러나 동기화되지 않습니다.

시나리오 1 : 텍스트 1,2,3을 선택합니다. [OK] 시나리오 2 : 텍스트 2 선택; "최신 버전 만"확인

이로 인해 옵션 ( "선택…")이 표시되지 않습니다. 내가 원하는 것이 아닙니다.

더 나빠집니다.

시나리오 3 : 선택 취소; 텍스트 선택 3; 그런 다음 "최신 버전 만"을 다시 확인하십시오.

이제 선택한 선택 옵션이 필터링되지 않은 옵션 2 번을 선택하도록 설정됩니다.

아마도 간단한 문제가있을 것입니다. 나는 아마 그것을 작동시킬 수 없습니다. 다음은 바이올린입니다 : Fiddle : http://jsfiddle.net/h5mt51gv/6/

모든 도움과 제안에 감사드립니다!

토 말락

귀하의 접근 방식을 간소화했습니다.

  • <select>계산 된 옵션 목록에 대한 바인드 ( visibleTextBatches)
  • 이 계산 된 목록은 확인란 ( latestOnly) 의 상태에 따라 달라지며 전체 목록과 필터링 된 목록간에 효과적으로 전환됩니다.
  • 필터링 된 목록 ( latestTextBatches)은 각 그룹의 최신 버전을 보유하는 또 다른 계산입니다.
  • <select>저장 실제 선택된 TextBatch관찰에서 객체 ( selectedTextBatch)
  • 목록이 필터링 될 때 visibleTextBatches최신 선택 항목 TextBatch이 현재 항목이되도록하는에 대한 구독 이 있습니다. 목록이 필터링되지 않으면 아무 작업도 수행하지 않습니다.

function TextBatch(data) {
    this.textbatchId = data.textbatchId;
    this.parentId = data.parentId;
    this.version = data.version;
    this.title = ko.observable(data.title);
}

function ViewModel() {
    var self = this;

    // read up on the mapping plugin, too
    self.textBatches = ko.observableArray([
        new TextBatch({textbatchId: 1, parentId: 1, version: 1, title: "TB1.1"}),
        new TextBatch({textbatchId: 2, parentId: 1, version: 2, title: "TB1.2"}),
        new TextBatch({textbatchId: 3, parentId: 3, version: 1, title: "TB2.1"})
    ]);
    self.selectedTextBatch = ko.observable();
    self.latestOnly = ko.observable(false);
    self.latestTextBatchGroups = ko.computed(function () {
        var latest = {};
        ko.utils.arrayForEach(self.textBatches(), function (batch) {
            if (!latest.hasOwnProperty(batch.parentId) || 
                batch.version > latest[batch.parentId].version
            ) latest[batch.parentId] = batch;
        });
        return latest;
    });
    self.latestTextBatches = ko.computed(function () {
        return ko.utils.arrayFilter(self.textBatches(), function (batch) {
            return batch === self.latestTextBatchGroups()[batch.parentId];
        });
    });
    self.visibleTextBatches = ko.computed(function () {
        return self.latestOnly() ? self.latestTextBatches() : self.textBatches();
    });
    self.visibleTextBatches.subscribe(function () {
        var selectedBatch = self.selectedTextBatch();
        if (selectedBatch && self.latestOnly()) {
            self.selectedTextBatch(
                self.latestTextBatchGroups()[selectedBatch.parentId]
            );
        }
    });
}

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<div>
    <select data-bind="
        options: visibleTextBatches, 
        optionsText: 'title',
        optionsCaption: 'Select...',
        value: selectedTextBatch
    " />
</div>

<div>
    <input type="checkbox" id="chkLatestOnly" data-bind="checked: latestOnly" />
    <label for="chkLatestOnly">Latest only</label>
</div>

<hr />
<pre data-bind="text: ko.toJSON($root, null,2)"></pre> 

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

녹아웃 및 선택기와 관련된 어레이 필터링 문제

분류에서Dev

녹아웃 필터링 된 어레이 문제

분류에서Dev

100 % 높이 및 스크롤바와 관련된 레이아웃 문제

분류에서Dev

Wordpress-글꼴 크기 및 이미지 레이아웃과 관련된 Chrome / Safari 문제

분류에서Dev

문자열을 기반으로 녹아웃 관찰 가능 배열 필터링

분류에서Dev

녹아웃 js 및 값 변경에 의한 데이터 바인딩 관련

분류에서Dev

"상대 레이아웃"과 관련된 레이아웃 문제

분류에서Dev

C # WPF XAML : 동적 확장, 상태 표시 줄 및 수평 데이터 그리드 확장과 관련된 레이아웃 문제

분류에서Dev

완료-데이터 쓰기와 관련된 pureJS 문제, 아이디어가 있습니까?

분류에서Dev

양식 데이터 게시와 관련된 MEAN 스택 문제

분류에서Dev

데이터 복사와 관련된 C ++ 스레드 문제

분류에서Dev

Python 및 외국어와 관련된 인코딩 문제

분류에서Dev

판매 및 트렌드와 관련된 앱 스토어 문제

분류에서Dev

19.10 : crypttab 및 업데이트와 관련된 스왑 문제

분류에서Dev

어레이와 관련된 Monty Hall 시뮬레이션 문제

분류에서Dev

밝기 제어 및 비디오 재생과 관련된 NVIDIA 디스플레이 문제

분류에서Dev

jQuery UI 레이아웃과 관련된 Firefox Select 문제

분류에서Dev

간격과 관련된 iOS 자동 레이아웃 문제

분류에서Dev

녹아웃 제품 필터링

분류에서Dev

계층 적 쿼리-행이 아닌 이웃 열에서 필터링 된 직원 및 해당 리더 선택

분류에서Dev

XML 데이터 액세스와 관련된 PHP foreach 문 문제

분류에서Dev

플로트 및 디스플레이와 관련된 Chrome과 Firefox의 레이아웃 차이 : 표

분류에서Dev

플로트 및 디스플레이와 관련된 Chrome과 Firefox의 레이아웃 차이 : 표

분류에서Dev

iOS 8.1에서는 코어 데이터 바인딩과 관련된 자동 레이아웃 문제이지만 iOS 7에서는 그렇지 않음

분류에서Dev

어레이와 관련된 DLL Interop 및 메모리 관리

분류에서Dev

포인터와 관련된이 코드의 문제점

분류에서Dev

데이터로드와 관련된 ASP.NET Core OnPost () 문제

분류에서Dev

C : 이중 포인터와 관련된 Realloc 문제

분류에서Dev

드롭 다운 값을 기준으로 녹아웃 테이블 필터링

Related 관련 기사

  1. 1

    녹아웃 및 선택기와 관련된 어레이 필터링 문제

  2. 2

    녹아웃 필터링 된 어레이 문제

  3. 3

    100 % 높이 및 스크롤바와 관련된 레이아웃 문제

  4. 4

    Wordpress-글꼴 크기 및 이미지 레이아웃과 관련된 Chrome / Safari 문제

  5. 5

    문자열을 기반으로 녹아웃 관찰 가능 배열 필터링

  6. 6

    녹아웃 js 및 값 변경에 의한 데이터 바인딩 관련

  7. 7

    "상대 레이아웃"과 관련된 레이아웃 문제

  8. 8

    C # WPF XAML : 동적 확장, 상태 표시 줄 및 수평 데이터 그리드 확장과 관련된 레이아웃 문제

  9. 9

    완료-데이터 쓰기와 관련된 pureJS 문제, 아이디어가 있습니까?

  10. 10

    양식 데이터 게시와 관련된 MEAN 스택 문제

  11. 11

    데이터 복사와 관련된 C ++ 스레드 문제

  12. 12

    Python 및 외국어와 관련된 인코딩 문제

  13. 13

    판매 및 트렌드와 관련된 앱 스토어 문제

  14. 14

    19.10 : crypttab 및 업데이트와 관련된 스왑 문제

  15. 15

    어레이와 관련된 Monty Hall 시뮬레이션 문제

  16. 16

    밝기 제어 및 비디오 재생과 관련된 NVIDIA 디스플레이 문제

  17. 17

    jQuery UI 레이아웃과 관련된 Firefox Select 문제

  18. 18

    간격과 관련된 iOS 자동 레이아웃 문제

  19. 19

    녹아웃 제품 필터링

  20. 20

    계층 적 쿼리-행이 아닌 이웃 열에서 필터링 된 직원 및 해당 리더 선택

  21. 21

    XML 데이터 액세스와 관련된 PHP foreach 문 문제

  22. 22

    플로트 및 디스플레이와 관련된 Chrome과 Firefox의 레이아웃 차이 : 표

  23. 23

    플로트 및 디스플레이와 관련된 Chrome과 Firefox의 레이아웃 차이 : 표

  24. 24

    iOS 8.1에서는 코어 데이터 바인딩과 관련된 자동 레이아웃 문제이지만 iOS 7에서는 그렇지 않음

  25. 25

    어레이와 관련된 DLL Interop 및 메모리 관리

  26. 26

    포인터와 관련된이 코드의 문제점

  27. 27

    데이터로드와 관련된 ASP.NET Core OnPost () 문제

  28. 28

    C : 이중 포인터와 관련된 Realloc 문제

  29. 29

    드롭 다운 값을 기준으로 녹아웃 테이블 필터링

뜨겁다태그

보관