2017-02-17 18 views
1

在icCube Reporting V6中,我基於ic立方的示例創建了一個模板小部件https://www.iccube.com/your-first-html-widget/。所以,我把所有的JS代碼放在After render事件中。如何避免在數據更改時完全刷新小部件?

我想要在創建widget的時候定義和默認一些變量,這些變量在整個報表的使用過程中可以改變,並且可以用作這個widget的參數。

的問題是,在每一個數據的變化,小部件是完全刷新和重建,重置我的變量設置爲默認,以及...

是它缺少一個init widget事件中,我們可以初始化小部件和變量?那麼on Data ReceivedAfter render事件只是旨在管理數據操作和渲染? (關於這些變量) 或者...我只是在做一個錯誤的方式?

回答

2

每次我們獲取新數據或小部件的某個屬性發生變化時,都會調用渲染事件。最新版本很少見,但如果某些屬性已使用事件定義,則可能是最新版本。

我們需要的是在這個方法上添加一個狀態來檢查widget是否已經被渲染。這可以通過兩種方式完成,使用jquery檢查dom是否已更改或添加javascript對象。

第一個很容易與jquery和應該使用,如果沒有需要緩存javascript對象。對於第二個,我們已經兩個解決方案:

1)我們可以使用jQuery JavaScript對象綁定到HTML元素(data):

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

相關問題