0

senchatouch2フレームワークのリストコンポーネントに問題があります。私の問題は、私のリストに現在の位置と場所の間の計算された距離が表示されないことです。
まず、ユーザーが名前をクリックすると、リスト(名前+距離)のあるナビゲーションビューを使用します。名前をクリックすると、詳細が表示されます(+戻るボタンが自動的に生成されます)。戻るボタンを押すと、リストに正しい距離が表示されます。しかし、私は本当に距離が最初に示される必要があります。私はたくさん試しましたが、何も役に立ちません。モデルとストアを使用します。

    '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 

}); 

前もって感謝します!

4

1 に答える 1

0

私は解決策を見つけました:

ナビゲーションビューのリスナーを「show」から「painted」に変更するだけで、正常に機能します。

于 2012-06-19T05:58:46.257 に答える