0

デバイスの現在の位置をプロキシ呼び出しに追加しようとしています。'+radius+' と '+values+' の変数を既に追加しています。Ext.util.Geolocation を使用して、コンソールで地理位置情報を確認できます。「+lat+」や「+lon+」などのプロキシに追加できるように、これから緯度と経度の変数を取得するにはどうすればよいですか

Ext.define('FirstApp.controller.History', {
extend:'Ext.app.Controller',

config:{
    refs:{
        main:'main',
        placesContainer:'placesContainer',
        placesList:'placesContainer places list',
        info:'info',
        review:'review',
        rss:'rss',
        favourites:'favourites',
        mapcontainer:'mapcontainer',
        visit: '#visit',
        radius: '#radius'
    },
    control:{
        'placesContainer places list':{
            itemtap:'recordDetailsNavigation'
        },
        'main':{
            activeitemchange:'recordTabChanged'
        },
         '#home': {
            // On the tap event, call onNewTap
            tap: 'onHomeTap'
        },
          '#info': {
            // On the tap event, call onNewTap
            tap: 'onInfoTap'
        }
        ,
          '#search': {
            // On the tap event, call onNewTap
            tap: 'onSearchTap'
        }
          ,
          '#leaveReview': {
            // On the tap event, call onNewTap
            tap: 'onReviewTap'
        }

    },
    routes: {
        'placesContainer': 'gotoPlacesContainer',
        'placesContainer/:id': 'gotoPlacesContainerDetails',
        'info': 'gotoInfo',
        'review': 'gotoReview',
         'rss': 'gotoRss',
        'favourites': 'gotoFavourites',
        'mapcontainer': 'gotoMapContainer'
    }
     },
     recordDetailsNavigation:function (list, index, target, record) {
    console.log("recordDetailsNavigation");
    this.getApplication().getHistory().add(Ext.create('Ext.app.Action', {
        url:'placesContainer/' + record.get('id')
    }),true);
    },
    recordTabChanged:function(tab,value, oldValue){
    console.log("recordTabChanged "+value.xtype);
    this.getApplication().getHistory().add(Ext.create('Ext.app.Action', {
        url:value.xtype
    }),true);
     },


gotoPlacesContainer:function(){
    console.log('Goto PlacesContainer');
    this.getMain().setActiveItem(0);
    var items = this.getPlacesContainer().getItems();
    console.log("PlacesContainer has "+items.length+" children")
    if(items.length>1){
        this.getPlacesContainer().pop();
    }


},

gotoReview:function(){
    console.log('Goto Review');
    this.getMain().setActiveItem(1);
     Reviews.load();
},


gotoMapContainer:function(){
    console.log('Goto MapContainer');
    this.getMain().setActiveItem(2);
},

gotoPlacesContainerDetails:function(id){
    console.log('Goto PlacesContainer Details for id '+id);

    this.gotoPlacesContainer();
    this.getPlacesList().refresh();
    this.getPlacesList().on('refresh',function(){
        var store = Ext.getStore('Places');
        var index = store.find('id',id);
        var record = store.getAt(index)
        this.getPlacesContainer().push({
            xtype:'details',
            title:record.data.name,
            data:record.data
        })
        this.getApplication().getHistory().add(Ext.create('Ext.app.Action', {
            url:'placesContainer/' + record.get('id')
        }),true);
    },this);

},

  gotoInfo:function(){
    console.log('Goto Info');
    this.getMain().setActiveItem(3);
},

    gotoRss:function(){
    console.log('Goto Rss');
    this.getMain().setActiveItem(4);
},


gotoFavourites:function(){
    console.log('Goto Favourites');
    this.getMain().setActiveItem(5);
},


 onHomeTap: function() {

    Ext.Viewport.setActiveItem(Ext.create('FirstApp.view.Home'));
},

 onReviewTap: function() {

    Ext.Viewport.setActiveItem(Ext.create('FirstApp.view.CreateReview'));
},

  onInfoTap: function() {
    Ext.Viewport.setActiveItem(Ext.create('FirstApp.view.Info'));
},

  onSearchTap: function() {

    Ext.Viewport.setActiveItem(Ext.create('FirstApp.view.Main'));

    var values = this.getVisit().getValue();
     var radius = this.getRadius().getValue() * 1000;

    console.log(values);
    console.log(radius);

    var proxy = {
    type:'ajax',
    id:'myPlaceProxy',
    url:'https://maps.googleapis.com/maps/api/place/search/json?    location=52.247983,-7.141113&radius='+radius+'&types='+values+'&name=&sensor=false&key=',
    reader:{
        type:'json',
        rootProperty:'results'
    }
    }


   var geo = new Ext.util.Geolocation({
    autoUpdate: false,
    allowHighAccuracy: true,
    listeners: {
    locationupdate: function(geo) {
       lat = geo.getLatitude();
       lon = geo.getLongitude();
       var proxy = Ext.getCmp('myPlaceProxy');
       proxy.setUrl('https://maps.googleapis.com/maps/api/place/search/json?location='+lat+','+lon+'&radius='+radius+'&types='+values+'&name=&sensor=false&key=AIzaSyAAStZvDJ_5ENODEdSCanLWgJBG6p6eXBQ');
       console.log(proxy);
       Ext.StoreMgr.get('Places').setProxy(proxy);
       Ext.StoreMgr.get('Places').load();    
    }
    }
   });

  geo.updateLocation();
  }


});


Ext.define('FirstApp.store.Places',{
extend:'Ext.data.Store',

config:{

    autoLoad:false,
    model:'FirstApp.model.Place',
    proxy:{


    }
}
})
4

1 に答える 1

0

まず、プロキシに id を指定して、id を介していつでもアクセスできるようにします。

var proxy = {
        type:'ajax',
        id:'myPlaceProxy',
        url:'https://maps.googleapis.com/maps/api/place/search/json?location=52.247983,-7.141113&radius='+radius+'&types='+values+'&name=&sensor=false&key=',
        reader:{
            type:'json',
            rootProperty:'results'
        }
    }

次に、地理的な場所のlocationupdateイベントでプロキシにアクセスします

var geo = new Ext.util.Geolocation({
    autoUpdate: true,
    allowHighAccuracy: true,
    listeners: {
        locationupdate: function(geo) {
           lat = geo.getLatitude();
           lon = geo.getLongitude();
           var proxy = Ext.getCmp('myPlaceProxy');
           proxy.setUrl('https://maps.googleapis.com/maps/api/place/search/json?location='+lat+','+lon+'&radius='+radius+'&types='+values+'&name=&sensor=false&key='');
           console.log(proxy);
           Ext.StoreMgr.get('Places').setProxy(proxy);
           Ext.StoreMgr.get('Places').load();    
        }
    }
});

次に、これを呼び出して、いつでも地理の locationupdate イベントを発生させます

geo.updateLocation();

編集:

ただし、常に var geo を作成するとは限らないことを強くお勧めします。この geo.updateLocation(); を呼び出す必要があります。グローバルに作成するとすぐに使用できるため、より適切に管理できます

これを試して:

Ext.define('FirstApp.store.Places',{
extend:'Ext.data.Store',
id: 'myPlaces',
config:{

    autoLoad:false,
    model:'FirstApp.model.Place',
    proxy:{
        type:'ajax',
        url:'https://maps.googleapis.com/maps/api/place/search/json?    location=52.247983,-7.141113&radius='+radius+'&types='+values+'&name=&sensor=false&key=AIzaSyAAStZvDJ_5ENODEdSCanLWgJBG6p6eXBQ',
        reader:{
        type:'json',
        rootProperty:'results'
    }
}
});

その後、タップイベントでURLを次のように設定できます

onSearchTap: function() {

    Ext.Viewport.setActiveItem(Ext.create('FirstApp.view.Main'));

    var values = this.getVisit().getValue();
     var radius = this.getRadius().getValue() * 1000;

    console.log(values);
    console.log(radius);    

   var geo = new Ext.util.Geolocation({
    autoUpdate: false,
    allowHighAccuracy: true,
    listeners: {
    locationupdate: function(geo) {
       lat = geo.getLatitude();
       lon = geo.getLongitude();
       Ext.StoreMgr.get('Places').getProxy().setUrl('https://maps.googleapis.com/maps/api/place/search/json?location='+lat+','+lon+'&radius='+radius+'&types='+values+'&name=&sensor=false&key='');
       Ext.StoreMgr.get('Places').load();    
    }
    }
   });

  geo.updateLocation();
  }
于 2013-03-24T09:33:46.530 に答える