2012-06-14 1 views
0

우리는 AJAX 무거운 개찰구 응용 프로그램을 작성하고 renderHead()를 통해 CSS에 기여하는 패널이 있습니다. 그러나 AJAX를 통해 패널이 교체 될 때, 예를 들어 AjaxTabbedPanel을 통해 이전 패널의 헤더가 남아 있고 나머지는 오염됩니다. 응답 확장과는 별도로, CSS 선언이 지나치게 일반적 일 때 문제가 발생하여 응용 프로그램의 다른 영역에서 렌더링 문제가 발생합니다.개찰구 - 제거 오래된 헤더 기여/AJAX 패널 교체

이 방법이 있습니까? 예를 들어, 패널이 교체되었거나 더 이상 표시되지 않을 때 IHeaderReponse을 다시 만드는 메커니즘은 무엇입니까? 그것은 가치가 무엇인지에 대한

, 우리의 헤더 기여의 예입니다 : 우리는 개찰구 1.5.3을 사용하고

@Override 
public void renderHead(IHeaderResponse response) { 
    response.renderCSSReference(new SharedResourceReference(SearchMainPanel.class, "Search.css")); 
} 

. 따라서 우리의 전략을 재고 할 필요 - 내가 (즉, 헤더 참여자를 사용하지 않는) 패널의 <body> 마크 업에 <link rel="stylesheet" ... />를 렌더링하는 사용자 지정 레이블 성공이 있었다

그러나 IE8이 CSS의 존재를 인정하기를 거부.

+0

이 작동하는지 확실하지 위해 작동 할 필요가 있습니다 계단식, 어쩌면 당신은 그 공헌을'Behavior'로 옮기고 ['isTemporary'] (ht tp : //wicket.apache.org/apidocs/1.5/org/apache/wicket/behavior/Behavior.html#isTemporary%28org.apache.wicket.Component%29) true를 반환합니다. –

답변

2

AjaxRequestTarget은 특별히 해당 요청에 대한 새로운 IHeaderResponse을 수신하게됩니다. 지금보고있는 문제는 이전 요청이 더 이상 해당 페이지에 대해 원하지 않는 스타일 시트로 응답했기 때문입니다. 브라우저가 이미 페이지에 렌더링 한 스타일 시트를 무시하도록하는 유일한 방법은 해당 파일없이 페이지를 다시 렌더링하는 것입니다. 당신이 패널을 렌더링 할 때 개찰구가 관련 stylsheet를로드하기 때문에이 경우

, 당신은, 당신은 각 탭 렌더링 처음으로 스타일의 계단식에 따라 달라질 수 있습니다. 그러나 이전에 렌더링 된 탭 (패널)으로 돌아 가면 Wicket은 이미로드 된 스타일 시트를 다시 렌더링하지 않습니다. 즉 계단식 스타일의 한계를 극복 할 수있는 방법이 필요합니다.

이 작업을 수행하는 가장 좋은 방법은 당신이 (더 문맥 정확한 "TAB1"이나 뭐 같은) 네임 스페이스의 클래스를 사용하여 태그에서 각 패널을 포장해야 의미 ... 당신의 스타일 네임 스페이스에입니다, 당신은 모든 기초합니다 클래스 떨어져 당신의 스타일 :

.tab1 .heading { 
    font-weight: bold; 
} 

.tab1 .description { 
    background: blue; 
} 

.tab2 .heading { 
    font-size: 1.3em; 
} 

.tab2 .description { 
    background: lightblue; 
} 

이 각 탭 각각의 스타일 사이의 것을 구별 할 수 있는지 확인합니다 어떤 여전히 네임 스페이스 선택기

+1

감사합니다; 네임 스페이스는 분명 하나의 접근 방식입니다. 비록 내가 이것을 테스트하지는 않았지만 Javascript를 통해 외부에서 참조 된 CSS 파일을 제거 할 수 있지만 Wicket의 AJAX와 유사한 방식으로 작동하는 편리한 '정리'스타일 기능이 있기를 바랍니다. 사실 이것은 전체적으로 현명한 기본 동작으로 보입니다. – nullPainter

+0

일부 상황에서는 도움이 될 수 있지만이 경우 성능 문제가 발생할 수 있습니다 (같은 파일을 여러 번로드하는 경우). 또한 새로운 스타일을로드하고 DOM을 대체하고 이전 스타일을 제거하더라도 렌더링 된 내용이 겹치지 않기 때문에 변경하면 스타일이 적용되지 않은 내용 (FOUK)이 깜박입니다. –

+0

또한 Wicket의 DOM에서 JS/CSS 파일을 제거 할 방법이 없다는 것을 알고 있습니다. –