0

以下代码有效。我可以加载一个页面并让地球显示。

我想显示导航控件。如果我取消注释 initCB 中的行,它可以工作。

我认为代码存在范围问题,需要推动才能使其正常工作。

谢谢你。

declare var google;

class GoogleEarth {

    static pluginInstance;

    static display() {

        google.load("earth", "1");
        google.setOnLoadCallback(init);
    }

    static ShowNavigation() {

        this.pluginInstance.getNavigationControl().setVisibility(this.pluginInstance.VISIBILITY_AUTO);
    }

    private static init() {

        google.earth.createInstance('map3d', initCB, failureCB);
    }

    private static initCB(instance) {

        this.pluginInstance = instance;
        this.pluginInstance.getWindow().setVisibility(true);
        //this.pluginInstance.getNavigationControl().setVisibility(this.pluginInstance.VISIBILITY_AUTO);
    }

    private static failureCB(errorCode) {}
}

GoogleEarth.display();
GoogleEarth.ShowNavigation();
4

1 回答 1

0

根据您的评论更新...

这里有三个问题的组合。

  1. 竞争条件,变量在设置之前使用,因为它们是在回调中设置的,但在回调发生之前使用。

  2. 范围问题。回调函数在错误的范围内执行。

可以使用以下示例修复这些问题:

declare var google;

class GoogleEarth {

    private pluginInstance;

    constructor (private showNavigation = false){
    }

    display() {
        var self = this;
        google.load("earth", "1");
        google.setOnLoadCallback(function (instance) {
            google.earth.createInstance('map3d', function () {
                this.pluginInstance = instance;
                this.pluginInstance.getWindow().setVisibility(true);
                if (this.showNavigation) {
                    this.pluginInstance.getNavigationControl().setVisibility(this.pluginInstance.VISIBILITY_AUTO);
                }
            }, self.failureCB); 
        });
    }

    ShowNavigation() {

    }

    failureCB(errorCode) {}
}

var earth = new GoogleEarth(true);
earth.display();

我确实提到了三个问题!

最后一个问题是instance你被传递的没有调用函数getWindow()- 所以在代码的这个阶段有一个错误。这是一个仔细检查 Google 文档的案例。

于 2012-10-24T08:21:54.537 回答