ThinkGeo.com    |     Documentation    |     Premium Support

Unabel to update web controls like Label etc on browser using Tick Handler

Hi ThinkGeo,


I want to update Label, TreeView etc on Tick event handler based on AutoRefreshInterval settting on a MarkerOverlay.


I am unable to see the changes on the Label (namely no of times refreshed or Last time etc) on the browser side. I tried to put



        
  • Label on the same UpdatePanel as the map

  •     
  • Label in different UpdatePanel (Used Update() method and Triggers


   Is there something I am missing?


I attached sample AutoRefresh from new features


Thanks for your help.


Regards,


Anil



001_AutoRefreshOverlay.zip (2.51 KB)

Anil,


Thanks for your sample code, it makes us easy to understand your problem.


I think the reason of your problem is that you use callback to let server side update markers and labels, we only make the stuff related with map control sychronize with client side, but the label is not so it won't be refresh, when the postback operation happened, such as click a button, then the label will be refresh.


To solve this problem, you need to write your code to make them sychronized, one choice is that you can write a class implement ICallback interface to do it, another way is what we recommended, write javacript to overwrite a method OnMapRefresh, I provide the default implementation which may help you to implement.


function OnMapRefresh(map) {
    for (var i in map.layers) {
        var layer = map.layers[i];
        var UpdateInterval = layer.autoRefreshMilliseconds;
        var tick = layer.tick;
        if (tick && UpdateInterval && UpdateInterval != 0) {
            var timer = window.setInterval(Function.createDelegate({ 'args': 'AutoRefresh', 'id': layer.id }, function (evt) {
                var args = this.args + "_" + this.id;
                eval("CallServerMethod" + map.clientId + "(args, map.clientId)");
            }), UpdateInterval);
        }
    }
}

Thanks,


James



Hi James,


I don't understand what followig lines of code will achieve to get data from server.


I have a server callback method associated with TIck eventhandler of a marker overlay. Do I need to invoke a specific webservice in second option? I want to make reuse of the  Tick callback method.


var args = this.args + "_" + this.id;

eval("CallServerMethod" + map.clientId + "(args, map.clientId)");

 


Regards,


Anil



 


Anil,
 
Sorry for the wrong information. It’s useless to overrwrite method “OnMapRefresh”. It should be “OpenLayers.Layer.Markers.addMarker”. Here is the JavaScript code. For reference only.
 
<script language="javascript" type="text/javascript">
        var count = 1;
        var markerCount = 6;
        var OnMapCreated = function(map) {
            OpenLayers.Layer.Markers.prototype.addMarker = function(marker) {
                this.markers.push(marker);
 
                if (this.opacity != null) {
                    marker.setOpacity(this.opacity);
                }
 
                if (this.map && this.map.getExtent()) {
                    marker.map = this.map;
                    this.drawMarker(marker);
                }
 
                var number = count % markerCount;
                if (number == 0) {
                    var n = count / markerCount;
                    document.getElementById("<%= lblRefreshData.ClientID %>").value = n;
                }
                count++;
            }
        }
</script>
 
Thanks,

James