2017-02-17 1 views
1

icCube Reporting V6에서 iccube의 예를 기반으로 템플릿 위젯을 https://www.iccube.com/your-first-html-widget/에 만들었습니다. 그래서, 모든 JS 코드를 After render 이벤트에 넣었습니다.데이터 변경시 위젯을 완전히 새로 고치는 것을 피하려면 어떻게해야합니까?

위젯 작성시 일부 변수를 정의하고 기본값을 지정하고 싶습니다.이 변수는 전체 보고서 사용 중에 변경되어이 위젯의 ​​매개 변수로 사용될 수 있습니다.

문제는

은 우리가 위젯과를 초기화 할 수있는 init widget 이벤트를 실종 ... 각각의 데이터 변경에 위젯이 완전히 새로뿐만 아니라 기본으로 내 변수를 재설정 재구성 때문이다 변수 ? on Data ReceivedAfter render 이벤트는 데이터 조작 및 렌더링을 관리하기위한 것일뿐입니다. (이 변수들에 관해서) 아니면 ... 내가 잘못하고있는 것일까 요?

답변

2

매번 Render Event가 호출 된 후에 우리는 새로운 데이터를 얻거나 위젯의 속성 중 하나가 변경됩니다. 최신은 거의 없지만 일부 속성이 이벤트를 사용하여 정의 된 경우 가능합니다.

위젯이 이미 렌더링되었는지 확인하려면이 메소드에 상태를 추가해야합니다. 이 작업은 두 가지 방법으로 수행 할 수 있습니다. dom에 대한 jquery가 변경되었는지 확인하거나 javascript 객체를 추가하십시오.

첫 번째 것은 jquery에서 쉽게 사용할 수 있으며 자바 스크립트 객체를 캐시 할 필요가없는 경우 사용해야합니다.

1) 우리는 HTML 요소 (data)에 자바 스크립트 객체를 바인딩 jQuery를 사용할 수 있습니다 :

var state = $node.data("widgetState"); 
    if (state) { 
     // it's not the first time 
     state.times = state.times+1; 
     $node.html("It's the " + state.times + " time you clicked "); 
    } 
    else 
    { 
     // it's the first time 
     $node.html("It's the first time you clicked, don't be shy"); 
     state = { times : 1 } ; 
     $node.data("widgetState", state); 
    }  

2) icCube 당신도 할 수 6.0.4 이후 두 번째 위해 우리는 두 가지 솔루션을했습니다 로컬 상태 개체를 얻을 수있는 컨텍스트를 사용, context.widgetState()

당신은 작업 예제 here을 확인할 수 있습니다

관련 문제