2012-05-07 69 views
5

我想在extJs門戶內的extJS Gmappanel。以下是示例extJS門戶。在「google」portlet裏面,我需要谷歌地圖。extJs gmappanel內部extJs門戶

我們如何在extJs門戶中創建extJs gmappanel?

Ext.define('Ext.app.Portal', { 
extend: 'Ext.container.Viewport', 
uses: ['Ext.app.PortalPanel', 'Ext.app.PortalColumn', 'Ext.app.GridPortlet', 'Ext.app.ChartPortlet'], 
getTools: function(){ 
    return [{ 
     xtype: 'tool', 
     type: 'gear', 
     handler: function(e, target, panelHeader, tool){ 
      var portlet = panelHeader.ownerCt; 
      portlet.setLoading('Working...'); 
      Ext.defer(function() { 
       portlet.setLoading(false); 
      }, 2000); 
     } 
    }]; 
}, 

initComponent: function(){ 
    var content = '<div class="portlet-content">'+Ext.example.shortBogusMarkup+'</div>'; 
    Ext.apply(this, { 
     id: 'app-viewport', 
     layout: { 
      type: 'border', 
      padding: '0 5 5 5' 
     }, 
     items: [{ 
      id: 'app-header', 
      xtype: 'box', 
      region: 'north', 
      height: 70, 
      html: 'Dimestore Reports' 
     },{ 
      xtype: 'container', 
      region: 'center', 
      layout: 'border', 
      items: [ 
      { 
       id: 'app-portal', 
       xtype: 'portalpanel', 
       region: 'center', 
       items: [ 

       { 
        id: 'col-1', 
        items: [ 
        { 
         id: 'portlet-1', 
         title: 'google', 
         tools: this.getTools(), 
         items: {}, //I want ExtJs Form here. 
         listeners: { 
          'close': Ext.bind(this.onPortletClose, this) 
         } 
        }, 
        { 
         id: 'portlet-2', 
         title: 'grid', 
         tools: this.getTools(),       
         html: content, 
         listeners: { 
          'close': Ext.bind(this.onPortletClose, this) 
         } 
        } 
        ] 
       }] 
      }] 
     }] 
    }); 
    this.callParent(arguments); 
}, 
onPortletClose: function(portlet) { 
    this.showMsg('"' + portlet.title + '" was removed'); 
}, 
showMsg: function(msg){ 
    var el = Ext.get('app-msg'), 
    msgId = Ext.id(); 
    this.msgId = msgId; 
    el.update(msg).show(); 
    Ext.defer(this.clearMsg, 3000, this, [msgId]); 
}, 
clearMsg: function(msgId) { 
    if (msgId === this.msgId) { 
     Ext.get('app-msg').hide(); 
    } 
} 

});

請幫助

感謝

+0

我不知道如何添加gmappanel – Amit

+0

我已經在ext.require在portal.html加入「Ext.ux.GMapPanel」&http://pastebin.com/yPmBi4cp這段代碼portal.js但不會工作 – Amit

回答

4

我得到了答案

我只是用把GMAP在 'Ext.ux.GMapPanel' 庫&創建Gmappanel

Ext.create('Ext.ux.GMapPanel', { 
        autoShow: true, 
        layout: 'fit',       
        closeAction: 'hide',      
        height:300, 
        border: false, 
        items: { 
         xtype: 'gmappanel', 
         center: { 
          geoCodeAddr: 'pune,maharashtra', 
          marker: {title: 'Pune'} 
         }, 

        } 
       }) 
      }] 
     }] 

    }) 

以上代碼

謝謝

+0

將面板放入另一個面板中,供將來的觀衆使用。 – Phil

3

另一個解決方案可能是創建自定義組件。我創建了一個簡單的小提琴here

Ext.define('MyApp.view.Map', { 
    extend : 'Ext.Component', 
    alias : 'widget.map', 

    config : { 
     /** 
     * 
     * @cfg {Object} mapConfig 
     * The map specific configurations as specified 
     * in the the [Google Maps JavaScript API][googleMaps] 
     * 
     * [googleMaps]: https://developers.google.com/maps/documentation/javascript/3.exp/reference#MapOptions 
     */ 
     mapConfig : null 
    }, 

    /** 
    * 
    * @property {google.maps.Map} map 
    * The google map. 
    */ 
    map : null, 

    afterRender : function() { 
     var me = this, 
      mapConfig = me.getMapConfig(); 

     me.map = me.createGoogleMap({ 
      domEl : me.getEl().dom, 
      mapConfig : mapConfig 
     }); 
    }, 

    /** 
    * 
    * @method createGoogleMap 
    * This method creates a new Google map based on the defined 
    * configuration. 
    * 
    * @param {Object} config 
    * The configuration can contain the following 
    * key-value-pairs: 
    * 
    * - domEl {Node} The node do draw the map into. 
    * - mapConfig {Object} The map configuration as specified in the 
    * Google Maps JavaScript API 
    * 
    * @return {google.maps.Map} 
    * 
    * @throws {Error} Throws an error if the Google library is not 
    * loaded. 
    */ 
    createGoogleMap : function (config) { 
     if (typeof google === 'undefined') { 
      throw new Error('The google library is not loaded.');   
     } else { 
      return new google.maps.Map(
       config.domEl, 
       config.mapConfig 
      );    
     } 
    } 
}); 
2

有時候ExtJS的gmap可能不符合要求。在這種情況下,您可以嘗試以下方法。

對於視圖,您可以將面板放在任何地方。

{ 
    xtype: 'panel', 
    itemId: 'googleMap', 
    height: 500 
} 

控制器內部使用以下方法鏈接面板和谷歌地圖,然後你可以使用谷歌地圖API的所有功能。

var map = new google.maps.Map(this.getView().query('#googleMap')[0].body.dom,{ 
     center: , 
     zoom: , 
     mapTypeId:google.maps.MapTypeId.ROADMAP 
    });