2012-06-14 64 views
0

我在sencha touch 2框架上的列表组件有问题。我的问题是,我的列表不显示当前位置和地点之间的计算距离。
首先,当用户单击名称时,会出现一个带有列表(名称+距离)的导航视图,其中会显示更多关于它们的详细信息(+后退按钮将自动生成)。如果按下后退按钮,列表将在列表中显示正确的距离。但我真的需要第一次显示距离。我尝试了很多,但没有任何帮助。 我使用的模型和存储:Sencha Touch 2列表/商店

'Ext.define('Guide.store.ProjekteList', { 
    extend: 'Ext.data.Store', 

    config:{ 
     model: "Guide.model.ProjekteList", 
     autoLoad:true, 
     sorters: ['distance'], 
     storeId: 'ProjekteList', 
     proxy: { 
      type: 'ajax', 
      url : 'PHP/get_MainList.php', 
      reader: { 
       type: 'json', 
       rootProperty:'items' 
      } 
     }, 
     listeners: { 
      load : function(){ 
        this.each(function(store){ 
         var newData = getDis(store.data); 
        });//each      
      }//load func 
     }// listener 
    }//config 
});// klasse 

var getDis = function(dataset) { 
    var geo = Ext.create('Ext.util.Geolocation', { 
    autoUpdate: false, 
    listeners: { 
     locationupdate: function(geo) { 
      polat = geo.getLatitude(); 
      polng = geo.getLongitude(); 
      var B1 = dataset.Lat/180 * Math.PI; 
      var B2 = polat/180 * Math.PI; 
      var L1 = dataset.Lng/180 * Math.PI; 
      var L2 = polng/180 * Math.PI; 
      var zwi = Math.acos(Math.sin(B1)*Math.sin(B2)  + Math.cos(B1)*Math.cos(B2)*Math.cos(L2-L1)); 
      var r = 6378.137; //km 
      dataset.distance = r * zwi; 
      dataset.distance = Math.round(dataset.distance*100)/100; 

     }, 
     locationerror: function(geo, bTimeout, bPermissionDenied, bLocationUnavailable, message) { 
      if(bTimeout){ 
       alert('Timeout occurred.'); 
      } else { 
       alert('Error occurred.'); 
      } 
     } 
    } 
}); 
geo.updateLocation(); 
return dataset; 

};' 

和我的模型:

'Ext.define('Guide.model.ProjekteList', { 
    extend: 'Ext.data.Model', 

    config: { 
     fields: ['Projektname', 'Lat', 'Lng', 'distance', 'ID'], 
    } 
}); 

这里是我的导航视图:

'Ext.define('Guide.view.ProjekteList', { 
extend: 'Ext.navigation.View', 

xtype: 'projektelist', 

config: { 

     title: 'Orte', 
     iconCls:'Projekte' , 
     id: 'listButton', 


     items:[ 

     { 
      xtype: 'list', 
      onItemDisclosure: true, 
     /* plugins: [ 
        { 
         xclass: 'Ext.plugin.ListPaging', 
         autoPaging: false, 

        } 
       ], */ 
      title: 'Sehenswerte Orte', 
       store: 'ProjekteList', 
      itemId: 'liste', 
      itemTpl: '<h2>{Projektname}</h2> Entfernung: {distance} km',  
      listeners: { 
          show: function(){ 

            this.refresh(); 

          } //show function 
      }, //listeners 
     } // item 
     ] //items 
}// config 

}); ' 

和我的控制器

Ext.define("Guide.controller.ProjekteList", { 
extend: "Ext.app.Controller", 

views: ['ProjektList'], 

config: { 

     refs: { 
      projekt: 'projektelist', 

     }, 
     control: { 
      'projektelist list': { 
       itemtap: 'showDetail' 
      } 
     }       
    }, 
    showDetail: function(list, index, element, record) {  
     var projektid = record.get('ID'); 

Ext.StoreMgr.get('ProjektDetail').setProxy({url:'PHP/get_Detail.php? 
ID='+projektid}).load();  
     this.getProjekt().push({ 
     xtype: 'projektdetails', 
     }); 

    } //  showDetail function 

}); 

提前致谢!

回答

0

我找到了解决办法:

只改变听众从“秀”到“画”导航视图,它工作正常。