2012-06-14 4 views
0

У меня проблема со списком компонентов на sencha touch 2 framework. Моя проблема заключается в том, что мой список не показывает расчетное расстояние между текущей позицией и местами.
Сначала я использую навигационное представление со списком (имя + расстояние), когда пользователь нажимает имя. Более подробная информация о них появляется (+ обратная кнопка будет генерироваться автоматически). Если нажать кнопку «Назад», список отобразит правильное расстояние в списке. Но мне действительно нужно, чтобы расстояние было показано в первый раз. Я много пробовал, но ничего не помогает. я использую модель и магазин: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

Я нашел решение:

изменить только слушатель в навигационном от «шоу» в «нарисованный» и он работает отлично.