0

オブジェクトが定義された後にのみ関数を実行できるようにする必要があります。現在、fascade パターンで作業しており、1 つのメソッドが別のメソッドに依存しています。この場合、「setFullMap」の実行が完了していないため、「addNewLayer」は失敗します。解決策はありますか?私はjqueryとvanilla jsを使用しているので、この時点でほとんどのソリューションが役に立ちます:

var jen = (function(){

  function setFullMap(mapID){
    jen.map = new Map(mapID);
  }

  function setLayer(opt){
   //execute code here after jen.map is defined
  }
 return{
   samp: function(id, opt){
     setFullMap(id);
     addNewLayer(opt);
   }
 };
})();

ありがとう

解決:

var jen = (function(){
function setFullMap(mapID, callback) {
    jen.map = new Map(mapID);

    if(jen.map){
      callback();
    }
}

return {
  samp: function(id, opt){
    setFullMap(id, function(){
      addNewLayer(opt);
    }.bind(this));
  }
 };
})();
4

4 に答える 4

0

ドキュメントを確認したところ、聞くことができるさまざまなイベントがあるようです。

例えば:

var m = new Map(...);

m.on('load', function () {
    //execute code when the first layer is ready
});

var l = new Layer(...);

l.on('load', function () {
    //execute code when the layer has been initialized
});

Layer.loadイベントについても注意深く述べられています。

レイヤーのレイヤー プロパティが正常に設定された後に発生します。レイヤーをマップに追加するには、このイベントが成功する必要があります。

于 2013-08-14T19:03:45.420 に答える
0

コールバック パラメータを使用できます。

function setFullmap(mapId,callback) {
    jen.map = new Map(mapId);
    callback();
}

....

samp: function(id, opt){
    setFullMap(id,function() {
        addNewLayer(opt);
    });
}
于 2013-08-14T18:38:35.783 に答える