在接收结果之前调用DirectionsRenderer.setOptions时API会抛出错误

时间:2012-06-22 15:53:59

标签: google-maps-api-3

我的项目遇到了一个非常奇怪的错误。我通常使用版本标志" 3",但今天我开始收到错误,并回滚到" 3.8"解决了这个问题。

在我的路由文件的标题中,我有几个变量,如:

var SERVICE = new google.maps.DirectionsService(),
    SERVICE_OPTIONS = {
        "avoidTolls": false,
        "avoidHighways": false,
        "optimizeWaypoints": false,
        "provideRouteAlternatives": true,
        "unitSystem": google.maps.DirectionsUnitSystem.METRIC,
        "travelMode": google.maps.DirectionsTravelMode.DRIVING
    };
var RENDERER = new google.maps.DirectionsRenderer(),
    RENDERER_OPTIONS = {
        "draggable": true,
        "preserveViewport": false,
        "suppressMarkers": false,//true,
        "suppressPolylines": false,
        "suppressInfoWindows": true,
        "polylineOptions": {
            "strokeColor": "#9900ff",
            "strokeOpacity": 0.5,
            "strokeWeight": 4
        }
    };

靠近底部我有一个方法

function route(zoomToResults,mode) {
    RENDERER_OPTIONS.preserveViewport = !zoomToResults;
    RENDERER.setOptions(RENDERER_OPTIONS);  // error is thrown here
    /* more code, and then */
    SERVICE.route(SERVICE_OPTIONS,parseRouteResults);
};

我没有更改代码,我刚刚发现当我在接收路由结果之前尝试使用RENDERER.setOptions()时出现错误。我得到的错误是Uncaught TypeError: Cannot read property 'travelMode' of undefined,而不是3.8。

这是Google的API的错误还是他们在内部实施代码的方式发生了变化而没有考虑到此例外情况?

1 个答案:

答案 0 :(得分:3)

我找到了答案......

从现在开始,必须在DirectionsRenderer.setOptions()字面上添加DirectionsResult的情况下调用DirectionsRendererOptions

这会引发错误:

RENDERER.setDirections(results);
RENDERER.setOptions(RENDERER_OPTIONS);

这有效:

RENDERER_OPTIONS.directions = results;
RENDERER.setOptions(RENDERER_OPTIONS);