Ruby on Rails 중 jqueryujs 구성 요소 가 속 도 를 늦 추 는 문제 해결
2603 단어 RailsJavaScript
jquery ujs 는 대화 상자 확인,ajax 트리거,폼 제출 버튼 자동 사용 하지 않 기 등 매우 편리 한 기능 을 포함 하고 있 습 니 다.본 고 는 주로 ajax 를 촉발 하 는 기능 을 토론 합 니 다.
간단 한 태그 속성 을 추가 함으로써 jquery ujs 는 자바 스 크 립 트 코드 를 쓰 지 않 고 일반적인 링크 나 폼 을 ajax 로 변환 하여 제출 할 수 있 습 니 다.
<%= link_to ' ', close_project_path(project), remote: true, method: :post %>
위의 코드 는 다음 과 같은 코드 를 생 성 할 것 이다.
<a href="/projects/1/close" data-remote="true" data-method="post"> </a>
사용자 가 클릭 하면 가리 키 는 주소/procjects/1/close 를 실행 합 니 다.method 는 get 의 일반적인 요청 이 아 닌 post 의 ajax 요청 을 실행 하여 ajax 호출 을 편리 하 게 합 니 다.인터넷 속도 가 느 려 서 생 긴 문제
일이 모두 아름 다운 것 은 아 닙 니 다.네트워크 속도 가 느 릴 때 jquery ujs 의 이 실현 에 문제 가 생 길 수 있 습 니 다.문서 가 불 러 오지 않 으 면 사용자 가 링크 를 클릭 하면 페이지 는 링크 주소 로 가 는 GET 요청 을 합 니 다.페이지 는 이동 하지만 이 주 소 를 가리 키 는 GET 요청 은 존재 하지 않 을 수 있 습 니 다.그러면 오류 가 발생 할 수 있 습 니 다.
사용자 가 관련 이 슈 를 제기 한 적 이 있 지만 개발 자 는 수리 하지 않 았 습 니 다.그러나 인터넷 속도 가 느 린 것 은 중국의 국정 입 니 다.문 제 는 우리 가 처리 해 야 합 니 다.CSS 3 의 일부 특성 을 통 해 이 문 제 는 해결 하기 어렵 지 않 습 니 다.
pointer-events
pointer-events: none;
The element is never the target of mouse events; however, mouse events may target its descendant elements if those descendants have pointer-events set to some other value. In these circumstances, mouse events will trigger event listeners on this parent element as appropriate on their way to/from the descendant during the event capture/bubble phases.
이 속성 은 요소 의 클릭 이 벤트 를 금지 할 수 있 습 니 다.일반 CSS 는 먼저 불 러 옵 니 다.페이지 로 딩 이 완료 되 기 전에 jquery ujs 와 관련 된 요소 에 pointer-events:none 을 적용 하 는 것 을 제어 하면 됩 니 다.스타일,페이지 로 딩 이 끝 난 후에 이 스타일 을 제거 하면 네트워크 속도 가 느 린 상황 에서 페이지 로 딩 이 완료 되 지 않 았 을 때 사용자 가 rmote 링크 를 클릭 하여 발생 하 는 오 류 를 해결 할 수 있 습 니 다.해결 방안
다음 전역 스타일 을 추가 합 니 다.기본적으로 data-remote 와 data-method 속성 이 있 는 탭 은 클릭 할 수 없습니다.body 요소 가 ready 라 는 css class 를 포함 하지 않 는 한 클릭 할 수 없습니다.
[data-remote], [data-method] {
pointer-events: none;
button, input[type=submit] {
pointer-events: none;
}
}
body.ready {
[data-remote], [data-method] {
pointer-events: auto;
button, input[type=submit] {
pointer-events: auto;
}
}
}
그리고 간단 한 스 크 립 트 를 통 해 페이지 를 불 러 온 후 body 요소 에 ready class 를 추가 합 니 다.
$(document).ready ->
$('body').addClass('ready')
그래서 문 제 는 쉽게 해결 되 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
새로운 UI의 Stripe Checkout을 Rails로 만들어 보았습니다.Stripe의 옛 디자인인 Stripe의 구현 기사는 많이 있습니다만, 지금 현재의 디자인에서의 도입 기사는 발견되지 않았기 때문에 투고합니다. Stripe의 체크아웃을 stripe의 문서라든지 stackoverfl...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.