2011-06-11 2 views
4

화면에 상호 작용하는 Ajax 컨트롤이 여러 개 있고 해당 컨트롤에 반응하는 구성 요소의 가시성을 제어하여 (주어진 상황에서만 의미가있는 내용 만 표시 할 수 있도록) 모든 경우에 수동으로 target.addComponent()을 호출하면 당신은 업데이트하기가 번거롭고 유지 보수가 쉽지 않습니다.개찰구 및 복잡한 Ajax 시나리오

결국 onClickonUpdate 콜백의 웹은 새로운 구성 요소를 화면에 추가하는 것이 예상보다 훨씬 어려워지고 있습니다.

이러한 복잡성을 피하기 위해 일반적으로 사용되는 전략은 무엇입니까 (그러한 라이브러리가있는 경우 라이브러리까지)?

업데이트 : 답장을 보내 주셔서 감사합니다. 매우 유용한 것으로 나타 났지만 한 가지만 허용 할 수 있습니다. 죄송합니다.

답변

2

여기 얼마나 많은 구성 요소를 말합니까? 십? 스물? 수백명?

최대 20 개 정도까지 표시 할 구성 요소를 제어하는 ​​상태 컨트롤러가있을 수 있습니다. 이 컨트롤러는 구성 요소 모델의 표시 필드를 설정하며 항상 모든 구성 요소를 컨트롤러가 처리하는 요청에 추가합니다. 구성 요소는 컨트롤러 핸들 메서드로 간단히 리디렉션하는 이벤트를 처리합니다.

좋은 성능을 얻기에 너무 많은 페이로드가있는 많은 수의 구성 요소의 경우 jQuery와 같은 자바 스크립트 라이브러리를 사용하여 클라이언트가 프로그램을 숨기고 숨길 수 있습니다.

+0

나는 내가 여기 타겟팅하는 최대 그래서 당신이 정말로, 어쨌든 한 화면에 더 많은 스물 이상의 요소가 있어야합니다 생각하지 않습니다. – biziclop

8

WebMarkupContainer과 같은 구조 구성 요소를 추가 할 수 있습니다.이 구성 요소를 AjaxTarget에 추가하면 업데이트 된 내용도 모두 업데이트됩니다. 이렇게하면 한 줄로 구성 요소 그룹을 업데이트 할 수 있습니다.

9

Wicket 1.5에는 이벤트 버스가 있습니다. 각 구성 요소에는 onEvent (Object payload) 메소드가 있습니다. component.send()를 사용하면 이벤트를 브로드 캐스팅 할 수 있으며 각 구성 요소는 페이로드 (예 : UserJoinedEvent 객체)를 검사하고 현재 Ajax 응답에 참여할지 여부를 결정할 수 있습니다. 간단한 데모는 http://www.wicket-library.com/wicket-examples/events/을 참조하십시오.

+2

이것은 정말로 유망한 것으로 들립니다. – biziclop

2

현재 Wicket 1.4에서 이벤트 버스를 시뮬레이트하기 위해 일종의 수정 된 옵저버 패턴을 사용합니다.

내 구성 요소는 서로를 알지 못하고 여러 페이지에서 다른 조합으로 재사용되므로 내 페이지는 관찰 가능한 관찰자의 역할을합니다. 한 컴포넌트가 다른 컴포넌트에도 영향을 미칠 수있는 Ajax 이벤트를 수신 할 때마다 이벤트 객체와 Ajax 대상이있는 페이지의 메소드를 호출한다. 페이지는 이러한 종류의 이벤트에 대해 등록한 모든 구성 요소에서 유사한 메소드를 호출하며 제공된 각 이벤트 객체의 기반에서 각 구성 요소가 반응해야하는 경우와 대응 방법을 결정할 수 있으며 대상에 첨부 할 수 있습니다.

위켓 방문자를 사용하여 보관할 수도 있습니다. 나는 어느 것이 더 좋을 지 모르지만, 그것은 주로 맛의 문제라고 생각합니다. 내가 페이지에 대한 구성 요소를 만드는거야 때

3

나는 구성 요소 배열에 추가하는 경향이 : 추가 기능이 배열 매개 변수를

Component[] pageComponents = { 
        new TextField<String>("Field1"), 
        new TextField<String>("Field2"), 
        new TextField<String>("Field3") 
} 

개찰구 1.5으로 [1].따라서 요소는 다음과 같이 페이지 또는 대상에 추가 할 수 있습니다 :

add(pageComponents); 
target.add(pageComponents); 

구성 요소는 다음 함께 새로 고침 할을 기준으로 그룹화 할 수 있습니다.

[1] http://www.jarvana.com/jarvana/view/org/apache/wicket/wicket/1.5-M3/wicket-1.5-M3-javadoc.jar!/org/apache/wicket/ajax/AjaxRequestTarget.html