엔터티 레코드의 다시 실행 기능이 상태를 올바르게 설정하지 않습니다.
P粉029057928
P粉029057928 2023-09-15 19:27:41
0
1
718

엔터티 레코드를 사용하여 마인드 매핑 애플리케이션을 구축하고 있습니다. 애플리케이션의 데이터는 노드 트리이며 실행 취소/다시 실행을 통해 노드의 부모를 다시 지정할 수 있기를 원합니다. 내가 직면한 문제는 실행 취소 작업이 제대로 작동하더라도 다시 실행 작업이 제대로 작동하지 않는다는 것입니다.

간단한 앱에서 내 문제를 재현했습니다.

으아악

"3의 부모 변경" 버튼을 클릭하면 ChangeState 기능이 다음과 같이 실행됩니다.

  1. 상위(노드 0) 하위 목록에서 노드 3을 제거합니다
  2. 새 상위 노드(노드 2) 하위 노드 목록에 노드 3을 추가합니다
  3. 노드 3의 상위 노드를 2로 재설정

재작업은 상태를 초기 값으로 올바르게 복원하며 열 1,2,3은 0의 하위 항목입니다.

하지만 Redo는 노드 0의 하위 노드 목록을 1,2로 설정해야 하는데 3으로 설정합니다! 아주 이상하게도 노드 0의 Children 속성과 직접적인 관련이 없는 노드 3의 Parentis 속성을 설정하지 않으면 이런 일이 발생하지 않습니다...

이것은 참조 유형과 값 유형 문제이거나 엔터티 레코드의 버그일 수도 있습니다... 도움이 필요하세요?

P粉029057928
P粉029057928

모든 응답(1)
P粉729518806

제가 예상한 대로 질문은 참고 질문입니다... 첫 번째 작업을 수행할 때 "검색" 기능 n => n.id === node.parentid를 사용하여 배열의 올바른 요소를 선택합니다. 그러나 Solid-Record가 명령 기록을 저장하는 방식은 "노드" 개체만 저장하는 방식입니다. 그리고 동일한 개체의 parentid 속성은 마지막 작업에 의해 수정됩니다. node.parentid를 저장하는 로컬 변수를 사용하여 문제가 해결되었습니다.

또는 SolidJS 스토어 API 문서를 자세히 읽은 후 다음과 같이 검색 기능 대신 직접 ID를 사용하세요.

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!