0

私は Mapbox Javascript API ( http://www.mapbox.com/mapbox.js/api/v1.3.1/ ) を使用しており、マップがポストバックでどのようにロードされるかについて問題が発生しています。ページが初めてロードされたとき、私が定義した一連の座標を地図の中心にしたいのですが、ユーザーがテキストボックスに郵便番号を入力すると、代わりにそれらの座標を地図の中心にしたいのです。コードをいじる前の私の最初の問題は、マップがドキュメントの準備ができたときにロードされ、ポストバック時にユーザーが定義したとおりにマップが新しいビューを設定しないことでしたが、現在、マップがそうでないという問題に直面していますドキュメントの準備ができたらロードしますが、ユーザーが郵便番号を入力すると、正常に機能します。

ここに私の document.ready 関数があります:

$( document ).ready(function() {
        var map = L.mapbox.map('map');
        var oldZoom = map.zoomControl;
        oldZoom.removeFrom(map);
        new L.Control.Zoom({ position: 'topright' }).addTo(map);
        map.addLayer(L.tileLayer('http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png'));
        map.setView([53.503355, -2.827564], 6); // this runs on document ready, but also sets the view on postback
        function _doPostBack() {
            updateMap();
        } // this is my attempt at a fix
        var markerLayer = L.mapbox.markerLayer()
        .addTo(map);
    });

そして、ユーザーがポストバックを引き起こした場合にのみ起動したい私の updateMap() 関数は次のとおりです。

function updateMap()
    {
        map.setView([<asp:Literal runat='server' id='currentLatSetView'/>,<asp:Literal runat='server' id='currentLongSetView'/>], <asp:Literal runat='server' id='theZoomScale'/>);
    }

関連するボタンコードは次のとおりです。

<asp:button runat="server" ID="submitPostcode" class="btn btn-default" OnClientClick="updateMap()" OnClick="submitPostcode_Click" Text="Go!"/>

だから私の質問は、どのように私のjavascriptにチェックを追加して、1.ページが初めてロードされたときに座標のセットにマップを中央に配置し、2. document.ready()のsetView()を防ぐにはどうすればよいですか?代わりに、別のユーザー定義座標で別の setView() を起動します。

4

1 に答える 1

1

隠しフィールドを定義して、座標値を指定できます。

<asp:HiddenField runat="sever" ID="hdnXAxis"  Vlaue="Your Default Value" />
<asp:HiddenField runat="sever" ID="hdnYAxis"  Vlaue="Your Default Value" />

ポストバック時:

hdnXAxis.Value= txtXAxis.Text;
hdnYAxis.Value= txtYAxis.Text;

JS:

$( document ).ready(function() {
var xAxis = $('#<%= hdnXAxis.Client%>').val();
var yAxis = $('#<%= hdnYAxis.Client%>').val();
        var map = L.mapbox.map('map');
        var oldZoom = map.zoomControl;
        oldZoom.removeFrom(map);
        new L.Control.Zoom({ position: 'topright' }).addTo(map);
        map.addLayer(L.tileLayer('http://{s}.tile.stamen.com/toner/{z}/{x}/{y}.png'));
        map.setView([xAxis, yAxis], 6); // this runs on document ready, but also sets 
        var markerLayer = L.mapbox.markerLayer()
        .addTo(map);
    });

これはテストされていませんが、このようなもので問題が解決する可能性があります。

于 2013-09-23T14:04:29.200 に答える