2013-05-18 49 views
3

我試圖覆蓋存儲代理中的limitParam的默認參數名稱。我想對http://search.twitter.com/search.json?q=kathmandu&rpp=2進行JSONP調用,但不是直接設置rpp,而是將其映射到limitParam並將其設置爲值。但它不是通過limitParam設置的。我這樣做的原因是參數鍵存儲發送(排序,目錄等)不匹配服務器端的參數(我無法控制)。提前致謝。覆蓋ExtJS中的默認參數名稱4商店

Ext.require('Ext.grid.View'); 
    Ext.require('Ext.util.Point'); 

    Ext.application({ 
    name: 'HelloExt', 
    launch: function() { 
    /*Ext.create('Ext.container.Viewport', { 
     layout: 'fit', 
     items: [ 
      { 
       title: 'Hello Ext', 
       html : 'Hello! Welcome to Ext JS.' 

      } 
     ] 
    });*/ 
    console.log('ok1'); 


    Ext.define('Video', { 
     extend: 'Ext.data.Model', 
     fields: ['from_user', 'from_user_id'] 
    }); 

    var myStore2 = Ext.create('Ext.data.Store', { 
     model: 'Video', 
     storeId : 'restfulStore', 
     proxy: { 
      type: 'jsonp', 
      url : 'http://search.twitter.com/search.json?q=kathmandu', 
      reader: { 
       type: 'json', 
       //root: 'data.items' 
       root: 'results' 
      }, 
      limitParam: 'rpp', 
      pageParam: 'page' 
     }, 
     listeners: { 
      load: function(store, records) { 
       Ext.each(records, function(rec) { 
        console.log(rec.get('from_user')); 
       }); 
      } 
     }, 
     sorters: [{ 
      property: 'from_user', 
      direction: 'DESC' 
     }, { 
      property: 'from_user_id', 
      direction: 'ASC' 
     }], 
     //autoLoad: true, 
     remoteSort: true 
    }); 

    var p = myStore2.getProxy(); 
    p.limitParam = 2; 



    myStore2.load(); 
    console.log('loads anyway??? loaded the store ...'); 


    Ext.create('Ext.grid.Panel', { 
     title: 'Restful Grid', 
     store: Ext.data.StoreManager.lookup('restfulStore'), 
     columns: [ 
      {header: "From User", width: 200, sortable: true, dataIndex: 'from_user'}, 
      {header: "From User ID", width: 200, sortable: true, dataIndex: 'from_user_id'} 
     ], 
     height: 400, 
     width: 400, 
     renderTo: Ext.getBody() 
    }); 



    console.log('store loaded!!'); 
} 
    }); 

回答

0

您的代理配置對於您想要執行的操作而言是很好的。問題在於你加載商店的方式。您不應該更改limitParam這實際上是名稱的配置選項。要影響結果數量,請使用加載方法的limit選項,您也可以使用pageSize選項在商店中進行配置。

因此,刪除此:

var p = myStore2.getProxy(); 
p.limitParam = 2; 

,而是,加載存儲庫時使用limit選項:

myStore2.load({ 
    limit: 2 
}); 

或者,也可以在存儲配置與pageSize選項設置如下:

Ext.create('Ext.data.Store', { 
    // ... 
    pageSize: 2 
    ,autoLoad: true 
}); 

你可以通過設置一個默認值t與pageSize,並在加載時更改爲limit

作爲一個方面說明,高音揚聲器API似乎不支持排序,因此您的sorters配置不會對返回的結果產生任何影響。您應該將remoteSort切換爲false,以根據您的配置將返回的結果在客戶端進行排序。