주 정부.pjax:beforeSend가 취소되었을 때의 id

3498 단어 jquery-pjax

묘사

안녕!
나는 이것이 버그인지 내가 무엇을 잘못했는지 확실하지 않다. 나는 pjax를 사용하여 페이지와 모드를 다른 용기에 불러옵니다.모든 html 응답은 새로 고쳐야 하기 때문에maxCacheLength=0에 캐시를 닫지만 모드를 닫은 후에 현재 페이지를 다시 불러오기를 원하지 않습니다(모드에서).이를 위해, 나는 사건을 사용한다.pjax:beforeSend의 preventDefault ().다시 pjax를 눌러서 아무것도 하지 않는 것 외에 모든 것이 정상입니다.이 내용을 보려면 예를 참조하십시오.
http://szegheo.github.io/pjaxtest/
보시다시피 문제는 pjax의popstate 처리 프로그램에 있습니다.id와 상태를 비교합니다.신분증:
https://github.com/defunkt/jquery-pjax/blob/v1.9.6/jquery.pjax.js#L438
나의 예에서, 이 값들은 같기 때문에 함수가 거기에 존재한다.내가 이 말을 주석해 버렸을 때, 나의 응용 프로그램은 정상적으로 작동할 수 있다.pjax:beforeSend에서 요청을 취소할 때 상태 id가 업데이트되지 않았을 수도 있습니까?

토론 #1

문제는 BeforeSend가 언제 취소되었는지, pjax에 있다고 생각합니다.상태가 업데이트되지 않았으며 이전 페이지의 데이터를 보존합니다.보시다시피 옵션에서만 업데이트됩니다.성공 관리자.이것은 옵션에 대한 작은 변동이다.beforeSend handler가 이 문제를 해결했지만, 나는 이것이 가장 좋은 해결 방안이 아니라고 생각한다.
    if (!fire('pjax:beforeSend', [xhr, settings])) {
      if (window.history.state && window.history.state.id) {
        pjax.state = window.history.state
      }
      return false
    }
#미스라프, 너 그거 알아?

토론 #2

너의 용례는 매우 복잡해서 나는 따라가기가 매우 어렵다.나는 네가 정태동사 같은 것에 pjax를 사용해야 하는지 아닌지 확실하지 않다.너도 pjax:beforeSend를 취소해서 네가 그린 구석을 돌고 싶은 것 같아.
상태 ID의 예상 동작은 무엇입니까?

토론 #셋

I'm not sure that you should be even using pjax for stuff like modals.


당신은 왜 PJAX가 정태동사에 쓰지 말아야 한다고 생각하지 않는지 우리에게 알려줄 수 있습니까?

토론 #4

Pjax는 페이지를 다시 불러오는 것을 피하고 HTML의 일부분만 바꾸면 페이지 사이를 더욱 빨리 내비게이션할 수 있는 라이브러리입니다.
모드 대화 상자는 페이지 변환과 무관한 UI 모드입니다.

토론 #5

빠른 답변 감사합니다.
이것은 사실상 사람을 곤혹스럽게 한다. 왜냐하면 너의 논점은 둘을 결합시키는 가장 큰 원인 중의 하나이기 때문이다.

Pjax is a library to make navigation between pages happen quicker by avoiding reload of the page and instead replacing just the partial HTML of the page.


왜 사람들은 PJAX를 사용해서modals의 일부인 HTMLs를 교체해서는 안 됩니까?

토론 #6

Why shouldnt people use PJAX to replace partial HTMLs inside modals?


그들이 이렇게 해서는 안 된다는 것은 아니다. 다만 pjax는 이렇게 복잡한 용례를 위해 설계된 것이 아니다.또한 모드 대화상자는 일반적으로 역사 기록 항목을 만들어서 그것들 사이를 앞뒤로 내비게이션할 수 있도록 해서는 안 된다.역사를 저장해야 할 때는 Pjax를 사용해야 합니다.
일반 Ajax로 모드 대화상자의 HTML 내용을 불러오는 것을 막고 pjax 내비게이션과 분리하는 것이 있습니까?

토론 #7

@mislav 저는 pjax가 정태동사에 좋다고 생각합니다.물론, 이벤트 처리 프로그램에 추가 코드를 추가해야 하지만, 나는 받아들일 수 있다.나의 유일한 문제는 modals에 사용되든 일반 페이지에 사용되든 버그가 있다고 생각한다는 것이다.
문서에서 pjax: beforeSend는 취소될 수 있기 때문에 사용하지만, 버그가 발생할 수 있습니다. (현재 역사 기록이 변경되었을 때)이 이벤트가 취소되면, pjax 내부에서 pjax를 업데이트하지 않습니다.현재 역사 기록 항목의 대상을 성명하는데, 이것은 우리가 여전히 이전 페이지에 있다고 여긴다.이것이 바로 다음 '후퇴/전진' 단추를 누르면 아무것도 할 수 없는 이유입니다. 왜냐하면 이 줄의 pjax 코드:
      // If popping back to the same state, just skip.
      // Could be clicking back from hashchange rather than a pushState.
      if (previousState.id === state.id) return
modals와 URL에 대한 마지막 생각은 내 bootstrap 프로그램에 제품 라이브러리가 있다는 것이다.모든 제품은 독특한 (seo 최적화) URL을 가지고 있습니다.내가 제품 항목을 눌렀을 때, 상세한 정보 페이지는 큰 (80%) 모드로 열리지만, 같은 URL을 사용하면 독립된 페이지로 볼 수 있다. (예를 들어 브라우저 옵션 카드를 우클릭/복사)따라서, 만약 모드에 있고, 사용자가 백 키를 누르면, 밑에 있는 페이지가 다시 불러오는 것을 원하지 않기 때문에, beforeSend 이벤트를 멈춰야 합니다.이것이 바로 pjax를 모드에 사용하고 모드 (제품) 를 열 때 URL을 변경해야 하는 이유입니다.내 예에서 캐시 페이지는 옵션이 아니기 때문에 $.pjax.기본값입니다.maxCacheLength는 0입니다.
어쨌든 이 위대한 플러그인과 당신의 지지에 감사 드립니다!

좋은 웹페이지 즐겨찾기