1

私はSenchaTouchを使用して、ボストン大学のバストラッカーのモバイルバージョンを開発しています。私が遭遇した問題は、google.maps.MarkerのメソッドsetPosition()がSafariやモバイルブラウザで位置の変更をレンダリングしていないことです。

設定されたコードは次のとおりです。

  • 空のマーカー配列を初期化します
  • Ext.Map()(煎茶呼び出し)を使用してマップを初期化します
  • 5秒間隔でJSONPリクエストを使用してデータをロードします
  • 新しいデータを取得するたびに、マーカー配列内にそのバス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と呼ばれます(複数のリンクを投稿することはできません)

4

2 に答える 2

0

[Sencha Person]マーカーが表示されないのは、0.93ベータリリースの既知のバグです。0.94リリース(現在のリリース)ではこれが修正されています。

于 2010-09-10T23:39:47.967 に答える
0

間隔ごとに一意のリクエストを行うことで問題が解決しました。さらにデバッグした後、キャッシュの問題だと思いました。そこで、JSONPリクエストにタイムスタンプパラメーターを追加しましたが、すべて修正されました。

于 2010-09-13T14:59:46.767 に答える