2010-09-09 41 views
1

我正在使用Sencha Touch爲波士頓大學開發移動版本的巴士跟蹤器。我遇到的問題是,google.maps.Marker的setPosition()方法不會在Safari或任何移動瀏覽器中呈現位置更改。谷歌地圖API v3標記setPosition在Safari(sencha touch)中不起作用

建立的代碼如下:

  • 我初始化一個空的標記陣列
  • 我初始化使用Ext.Map()(煎茶呼叫)
  • 我加載使用JSONP數據的地圖請求每隔5秒間隔
  • 每當我收到新的數據,我檢查如果我有我的標記數組內的巴士ID
  • 如果我不創建一個新的標記,並將其推入我的標記數組
  • 否則,我在我的標記數組中使用我在標記上的新位置調用setPosition。
  • 我然後運行一個檢查,以確保標記的位置得到了更新,位置從我的JSON請求

我已經驗證收到的(我認爲)標記陣列內的標記獲得新的位置,每次。另外,在Chrome和Firefox中,我的巴士移動(如預期),但在safari和iPhone/Android瀏覽器中,沒有任何移動。

這裏是代碼片段:

var markers = {}; 
var busesFunc = function() 
{ 
    Ext.util.JSONP.request({ 
     url: 'http://m.cms-devl.bu.edu/rpc/bus/livebus.json.php', 
     callbackKey: 'callback', 
     params: { 
     }, 
     callback: function(data) { 
      buses = data.ResultSet.Result;   

      for (var i = 0, ln = buses.length; i < ln; i++) { 
       var bus = buses[i]; 

       var position = new google.maps.LatLng(bus.lat, bus.lng); 

       if(!markers[bus.id]) 
       { 
        markers[bus.id] = new google.maps.Marker({ 
          map: map.map, 
          title: 'hello', 
          clickable: true, 
          draggable: false, 
          position: position, 
          icon: "images/bg.png", 
          zIndex: 100 
         }); 
       } 

       markers[bus.id].setPosition(position); 
       //markers[bus.id].setIcon("images/bg.png"); 
       //markers[bus.id].setMap(map.map); 
       //markers[bus.id].setMap(map.map); 

       if(bus.lat != markers[bus.id].position.lat() || bus.lng != markers[bus.id].position.lng()) 
       { 
        console.log(bus.id + " " + bus.lat + " " + bus.lng); 
        console.log(bus.id + " " + markers[bus.id].position.lat() + " " + markers[bus.id].position.lng()); 
       } 
      } 
     } 
    }); 
} 
setInterval(busesFunc, 5000); 

您可以查看這裏的樣本:http://www.bu.edu/nisdev/students/luiscarr/liveBusMobile/

而整個的JavaScript被稱爲functions.js(我不能發佈超過一個鏈接更多)

回答

0

問題通過每個間隔發出一個唯一的請求來解決。我想在經過一些更多的調試後,這是一個緩存問題。所以我給JSONP請求添加了一個timestamp參數,並且它都是固定的。

0

[Sencha Person]標記沒有出現是0.93 beta版本中已知的一個bug。 0.94版本(當前版本)有這個固定的。

+0

Michael,謝謝你的幫助。 0.94,確實解決了這個問題(嗯,它使得它在瀏覽器中保持一致)。但我想,如果我每次都做一個獨特的JSON請求,問題就會消失。所以我給我的請求添加了一個timestamp參數,並且它都是固定的。所以我想這是JSON響應的緩存問題,而不是谷歌地圖問題。 – 2010-09-13 14:50:25