pjax를 설정하지 마십시오.다른 선택이 없으면 설명해 주세요.밀어넣기 또는 선택.이것은 정말이다

3623 단어 jquery-pjax

묘사

이 PR은 제안의 일부이지만 상당 부분 피드백 요청입니다.
우리의 전제는 만약에 pjax 호출이 pushreplace을false로 설정한다면 호출은 pjax.state과 교환해서는 안 된다는 것이다.pjax의 퇴화에 대한 사용이지만, 기대가 기본적인 Ajax 행위로 되돌아가는 측면에서 놀라운 행동이다.
다음은 우리가 현재 실현하는 과정에서 어려움을 겪는 장면이다.우리는 내비게이션 구역(대부분의 경우)을 바꾸고 싶지만, 주요 내용 구역을 바꾸어 이 두 구역 사이를 교차 호출해야 한다.
우리는 이런 HTML이 있다.
국가 1:
<html>
<head>...</head>
<body>
  <div id="navigation">
    <ul id="sub-nav">
      <li><a href="/posts/technical" data-pjax="#navigation">Technical Posts</a></li>
      <li><a href="/posts/hobbies" data-pjax="#navigation">Hobby Posts</a></li>
    </ul>
  </div>
  <div id="main">
    <div class="dashboard">...</div>
  </div>
</body>
</html>
국가 2:
<html>
<head>...</head>
<body>
  <div id="navigation">
    <ul id="posts">
      <li><a href="/posts/technical/1" data-pjax="#main">Post 1</a></li>
      <li><a href="/posts/technical/2" data-pjax="#main">Post 2</a></li>
    </ul>
  </div>
  <div id="main">
    <div class="post">...</div>
  </div>
</body>
</html>
이 pjax 설정이 있습니다:
$(document).pjax('a[data-pjax=#main]', '#main')
$(document).pjax('a[data-pjax=#navigation]', '#navigation', { push: false })
우리는 다음과 같은 일련의 사건을 가지고 있다.
1. 초기 페이지 로드, 탐색 영역에 게시물 카테고리, 기본 영역에 대시보드 내용 표시
2. Pjax가 탐색 영역의 게시물 목록을 밀어넣거나 바꾸지 않아도 로드합니다.
3. Pjax는 기둥을 주 구역에 넣는다.
4. 뒤로 버튼을 누릅니다.
결과적으로 대시보드 컨텐트는 탐색 영역에 표시되고 기본 영역에는 이전에 로드된 게시물이 표시됩니다.네비게이션 내용의 pjax 마운트가 pjax.state으로 설정되었기 때문에 캐시 네비게이션 내용이 없지만 pushreplace이false이기 때문이다.pjax.state 또는 options.push이 진짜인 경우 이 PR은 options.replace에만 설정됩니다.우리는 이미 기존의 테스트를 실행했는데, 그것들은 모두 통과했지만, 상술한 장면에 새로운 테스트를 추가하지 않았다.
물론 pushreplace을 모두 false으로 지정한 상황에서 일반 Ajax를 사용하는 것이 더 적합할 수 있지만 이러한 제안의 변경이 파괴성을 도입하지 않았다면 Pjax 퇴화용례 중의 일부 의외의 경우를 없앨 수 있을 것 같다.

토론 #1

아이고, 저희가 미리 공관을 보냈습니다. 이빨을 드러내고 웃으며: 공관 기구를 갱신하고 일치할 때 다시 핑을 하겠습니다. 허허.

토론 #2

좋습니다. PR 본문을 업데이트했고, 우리의 문제와 추가 변경 동기에 대해 더욱 상세하게 설명했습니다.사상
이 홍보 보고서는 주로 피드백 요청이고 범례가 첨부되어 있다.감사합니다/cc@josh

토론 #셋

감사합니다.나는 아마도 좀 더 분명하게 밝혀야 할 것이다.
우선 push: false을 설치하는 공공용도는 기본적으로 정의되지 않았다.코드 경로가 존재하기 때문에 popstate 처리 프로그램은 브라우저의 역사 기록 상태를 수정하지 않은 상태에서 교체 요청을 할 수 있습니다.
더욱 광범위한 모델 범위 내에서, 나는 이런 홍보가 통상적으로 의미가 있다고 생각한다.그러나 나는 그것이 $.pjax.statepopstate의 불일치성 오류를 도입했다고 생각한다.$.pjax.state 배후의 생각은 is는 현재 브라우저의 역사 상태 대상을 시종일관 반영해야 한다는 것이다.실제로는 진정한api가 하나 있다. history.state.그러나 모든 브라우저에서 제대로 이루어진 것은 아니다.그래서 $.pjax.state은 다충전재입니다.
그래서 내가 걱정하는 것은
https://github.com/mattyoho/jquery-pjax/blob/no-push-no-replace-no-state/jquery.pjax.js#L446
이제 push: false이 새로 팝업된 이벤트와 일치하지 않습니다.
따라서, 우리는 당신의 용례를 사용할 수 있다고 생각하지만, popstate 처리 프로그램의 다른 곳에서 $.pjax.state의 리셋을 처리해야 합니다.$.pjax.state을 참고로 한 점도 #396에 제시되어 있습니다.PR의 변화는 이와 거의 같습니다.

좋은 웹페이지 즐겨찾기