odkaz v google mapě, nejde ajax

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
batko
Člen | 219
+
0
-

Ahoj,

mám na stránce Google mapu a v ní ikony. A u ikon je link.

<?php
<a class="ajax" href={plink getData!}>test</a>
?>

bohužel se mi nechce ajaxově odesílat. Pokud ho vystrčím mimo mapu tak to funguje.

Díky

Editoval batko (1. 2. 2016 21:06)

CZechBoY
Člen | 3608
+
0
-

Zkus znova nabindovat nette.ajax po načtení mapy.

batko
Člen | 219
+
0
-

CZechBoY napsal(a):

Zkus znova nabindovat nette.ajax po načtení mapy.

To jsem zkusil, ale nikterak to nepomohlo… Zkusil jsem všechny možné varianty.

EDIT:

Pokud kliknu poprvé na odkaz mimo mapu a již se ajaxový požadavek jednou provede, tak následně to jde již i z mapy…

Editoval batko (2. 2. 2016 16:47)

Hurass
Člen | 114
+
0
-

batko napsal(a):
To jsem zkusil, ale nikterak to nepomohlo… Zkusil jsem všechny možné varianty.

To je divné, mělo by to pomoct. Kde includuješ do šablony nette.ajax, až na úplně konci?

batko
Člen | 219
+
0
-

Hurass napsal(a):

batko napsal(a):
To jsem zkusil, ale nikterak to nepomohlo… Zkusil jsem všechny možné varianty.

To je divné, mělo by to pomoct. Kde includuješ do šablony nette.ajax, až na úplně konci?

ano je to poslední řádek kódu. Pak už je jen </body></html>. Ten kod je testovací…

<?php
<html>
    <meta charset="utf-8">
    <title>Map Icons Example</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">

    <!-- Google Maps -->

    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
    <link rel="stylesheet" type="text/css" href="/map/www/css/map-icons.css">
    <script type="text/javascript" src="/map/www/js/map-icons.js"></script>

    <style>
        html,
        body,
        #map-canvas {
            margin: 0;
            width: 500px;
            height: 500px;
        }
    </style>
</head>
<body>




<a class="ajax" href="/map/www/?do=set">nová data</a>


<a id="asd"  class="ajax" href="/map/www/?do=data">tesasdasdasdt</a>







<script>
    var map = null;
    function initialise() {
        var mapCanvas = document.getElementById('map-canvas');

        // Center
        var center = new google.maps.LatLng(49.752880, 13.375854);

        // Map Options
        var mapOptions = {
            zoom: 16,
            center: center,
            scrollwheel: false,
            mapTypeId: google.maps.MapTypeId.ROADMAP,
            styles: [
                { stylers: [{ visibility: 'simplified'}]},
                { elementType: 'labels', stylers: [{ visibility: 'off'}]}
            ]
        };

        // Create the Map
        map = new google.maps.Map(mapCanvas, mapOptions);

        test();



    }

    var pole = [];
</script>
<div id="snippet--dataa">    <script>

        function test() {

            if (pole.length > 0) {

                for (var i = 0; i < pole.length; i++) {
                    pole[i].setMap(null);
                }
                pole = [];
            }




            var marker0 = new Marker({
                map: map,
                position: new google.maps.LatLng(49.753,13.376),
                icon: {
                    path: SQUARE_PIN,
                    fillColor: '#00CCBB',
                    fillOpacity: 1,
                    strokeColor: '',
                    strokeWeight: 0
                },
                map_icon_label: '<span class="map-icon map-icon-point-of-interest"><a class="ajax" href="\/map\/www\/?do=data">testdfgdfgd</a></span>'
            });

            pole[0] = marker0;

            var marker1 = new Marker({
                map: map,
                position: new google.maps.LatLng(49.758,13.38),
                icon: {
                    path: SQUARE_PIN,
                    fillColor: '#00CCBB',
                    fillOpacity: 1,
                    strokeColor: '',
                    strokeWeight: 0
                },
                map_icon_label: '<span class="map-icon map-icon-point-of-interest"><a class="ajax" href="\/map\/www\/?do=data">testdfgdfgd</a></span>'
            });

            pole[1] = marker1;
        }
        test();
    </script>

</div>

<script>
    google.maps.event.addDomListener(window, 'load', initialise);

</script>
<div id="map-canvas"></div>


<a class="ajax" href="/map/www/?do=set">nová data</a>
779236
<a class="ajax" href="/map/www/?do=set">nová data</a>
<div id="snippet--data">        49.753,13.376<br>
        49.758,13.38<br>
</div><a class="ajax" href="/map/www/?do=set">nová data</a>

<div id="snippet--box">
</div>
    <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
    <script src="//nette.github.io/resources/js/netteForms.min.js"></script>
    <script src="/map/www/js/main.js"></script>
    <script src="/map/www/js/nette.ajax.js"></script>

</body>
</html>
?>

Editoval batko (2. 2. 2016 17:31)

iguana007
Člen | 970
+
0
-

A kde máš inicializaci:

$(function () {
    $.nette.init();
});

…jak se píše v dokumentaci: https://github.com/…ette.ajax.js ?

Hurass
Člen | 114
+
0
-

V tom JS máš odkaz špatně.

<a class="ajax" href="\/map\/www\/?do=data">

Mělo by to být:

<a class="ajax" href="/map/www?do=data">
batko
Člen | 219
+
0
-

iguana007 napsal(a):

A kde máš inicializaci:

$(function () {
    $.nette.init();
});

…jak se píše v dokumentaci: https://github.com/…ette.ajax.js ?

<script src=„/map/www/js/main.js“></script>

batko
Člen | 219
+
0
-

Hurass napsal(a):

V tom JS máš odkaz špatně.

<a class="ajax" href="\/map\/www\/?do=data">

Mělo by to být:

<a class="ajax" href="/map/www?do=data">

upravil jsem to, ale nemá to vliv…

batko
Člen | 219
+
0
-

Pokud se klikne napřed na odkaz mimo mapu a provede se ajaxový požadavek tak to již v mapě funguje. Ale pokud se v mapě klikne třeba na + nebo – tak již zase ajax nefunguje.

iguana007
Člen | 970
+
+1
-

Začal bych tím, že bych prohodil ty dva poslední JS soubory:

<script src="/map/www/js/nette.ajax.js"></script>
<script src="/map/www/js/main.js"></script>

tj. aby se ti main.js načítal až potom, co načteš nette.ajax.js a taky přesunul všechen JS do main.js, ať to není v <body>

Potom bych si zkusil pohrát s eventy google map (více o eventech zde: https://developers.google.com/…cript/events), protože podle mě se ti tam stane následující:
Když klikneš na tlačítko v google mapách (třeba zoom), tak se ti ta mapa překreslí a AJAXové odkazy již nejsou ajaxovými, protože nastavený listener se ti zruší.

Proto bych zkusil na idle event v mapách přidat reinicializaci Nette ajaxu:

google.maps.event.addListener(map, 'idle', function() {
	$.nette.load();
});
batko
Člen | 219
+
+1
-

iguana007 napsal(a):

Začal bych tím, že bych prohodil ty dva poslední JS soubory:

<script src="/map/www/js/nette.ajax.js"></script>
<script src="/map/www/js/main.js"></script>

tj. aby se ti main.js načítal až potom, co načteš nette.ajax.js a taky přesunul všechen JS do main.js, ať to není v <body>

Potom bych si zkusil pohrát s eventy google map (více o eventech zde: https://developers.google.com/…cript/events), protože podle mě se ti tam stane následující:
Když klikneš na tlačítko v google mapách (třeba zoom), tak se ti ta mapa překreslí a AJAXové odkazy již nejsou ajaxovými, protože nastavený listener se ti zruší.

Proto bych zkusil na idle event v mapách přidat reinicializaci Nette ajaxu:

google.maps.event.addListener(map, 'idle', function() {
	$.nette.load();
});

Děkuji za nakopnutí. Je to ono a funguje to super. DÍKY MOC tímto je problém vyřešen.