2017-05-10 44 views
-2

我想訪問在商店內創建的變量,但無法訪問。以下是代碼的一部分。訪問ExtJs中的商店內的變量6 MVC

Ext.define('MyApp.store.TreeStore', { 
     extend: 'GeoExt.data.store.LayersTree', 
     alias: 'store.layer_tree', 
     init: function(app) { 
      .... 

      this.ol_map = new ol.Map({ 
       layers: [group, layer3, layer4], 
       view: new ol.View({ 
        center: [0, 0], 
        zoom: 2 
       }) 
      }); 

     }, 
     layerGroup: this.ol_map.getLayerGroup() 
    }); 

我想在商店內訪問ol_maplayerGroup

+0

你想要訪問哪個var解釋它 – Tejas

+0

我想訪問ol_map。我更新了我的問題。 – wondie

回答

1

問題是您的store init函數是在layerGroup定義之後執行的。

要解決:

init: function(app) { 
     .... 

     this.ol_map = new ol.Map({ 
      layers: [group, layer3, layer4], 
      view: new ol.View({ 
       center: [0, 0], 
       zoom: 2 
      }) 
     }); 
     this.layerGroup = this.ol_map.getLayerGroup() 

    }, 
+0

不幸的是,GeoExt插件抱怨'layerGroup'沒有定義。 – wondie

+0

對不起,'layerGroup'不是'undefined',而是'null'。 '未捕獲的類型錯誤:無法讀取'null'屬性'getLayers' – wondie

0

我找到了解決辦法。我可以爲屬性添加一個函數,如下所示。

Ext.define('MyApp.store.TreeStore', { 
    extend: 'GeoExt.data.store.LayersTree', 
    alias: 'store.layer_tree', 
    layerGroup: (function() { 
     .... 

     this.ol_map = new ol.Map({ 
      layers: [group, layer3, layer4], 
      view: new ol.View({ 
       center: [0, 0], 
       zoom: 2 
      }) 
     }); 
     return this.ol_map.getLayerGroup() 

    })() 
}); 
+0

這是亞歷山大解決方案的另一種變體。問題在於原始問題中的'this'上下文不是對象 - 這是Ext.define被調用的範圍(可能是全局範圍)。 將「ol_map」變量的總體放入一個函數中時,這個上下文是不同的 - 通常它是ExtJS對象(除非有一些愚蠢的遊戲正在播放) –

+0

亞歷山大解決方案的問題是'layerGroup'仍然是空的。那麼訪問'layerGroup'屬性應該使用什麼正確的上下文呢? – wondie

+0

是否調用了''init''方法?我不知道GeoExt庫,所以我不能確定 - 但常規的ExtJS商店沒有「init」方法。 –