0

ユーザーが地図上のマーカーをクリックしたとき、またはユーザーが場所のリストから場所をクリックしたときに、情報ウィンドウを開こうとしています。私が抱えている問題は、 $apply が既に進行中のエラーを受け取っていることです。アプリケーションは引き続き正常に動作しますが、ドキュメントによると、このエラーが表示される場合は何か問題があります。これが、私が扱っている 2 つのコードです。

この最初の関数は、マップ上にマーカーを配置し、クリック マーカー クリック イベントに応答します。

var placeMarker = function(center) {
            var marker = new google.maps.Marker({
                map : map,
                position : new google.maps.LatLng(center.location.latitude, center.location.longitude)
            });

            var infoWindow = new google.maps.InfoWindow();

            marker.center = center;
            $scope.markers.push(marker);

            google.maps.event.addListener(marker, "click", function() {
                if ($scope.openInfoWindow) {
                    $scope.openInfoWindow.close();
                }

                $scope.center = marker.center;

                if (!$scope.compiled) {
                    var content = '<div id="infowindow_content" ng-include src="\'/infowindow.html\'"></div>';
                    $scope.compiled = $compile(content)($scope);
                }

                $scope.$apply();

                infoWindow.setContent($scope.compiled[0].innerHTML);
                infoWindow.open(map, marker);

                $scope.openInfoWindow = infoWindow;
            });
};

ここでの 2 番目の関数は、アプリケーションの別の場所からのイベントを受け取り、Google マップのクリック イベントを、開きたいマーカーに送信するものです。

$scope.$on("app:ResultListSelection", function(event, providerNumber) {
            for (var i = 0, length = $scope.markers.length; i < length; i += 1) {
                var center = $scope.markers[i].center;

                if (providerNumber === center.providerNo) {
                    google.maps.event.trigger($scope.markers[i], "click");
                    break;
                }
            }
        });

マーカーで Google マップのクリック イベントをトリガーすると、$apply already in progress エラーが発生します。

誰かが私が間違っているかもしれないことを知っていますか?

4

1 に答える 1

0

おそらくこれを行うためのより良い方法があることはわかっていますが、プロジェクトに underscore.js を追加し、アンダースコアを使用してデータを渡しながらテンプレートをコンパイルしました。

var template = _.template($("#infoWindowTmpl").html()),
    compiled = template($scope);

var infoWindow = new google.maps.InfoWindow({
    content : compiled
});
于 2013-01-29T16:44:48.907 に答える