2011-03-04 47 views
6

以下代碼正在工作。問題是請求正在發送與& _dc = 1299207914646 & limit = 25附加到發送到服務器的每個請求。沒有什麼我可以做的改變限制= 25。理想情況下,我不想將其他參數發送到服務器。然而,我會盡力將限制設置爲10000或其他。我能夠添加其他參數,但我沒有做任何刪除限制= 25。我也想擺脫& _dc參數,雖然我不知道爲什麼它被添加它不會造成問題。如何阻止ext-js將limit = 25添加到我的JSON查詢中?

任何想法?

請注意:下面的代碼格式的一些奇怪的問題?

感謝

Ext.require([ 
    'Ext.grid.*', 
    'Ext.data.*', 
    'Ext.panel.*' 
]); 
Ext.onReady(function(){ 
    Ext.regModel('Image_', { // window.Image is protected in ie6 !!! 
     fields: ['id', 'key', 'value'] 
    });  

var store = new Ext.data.JsonStore({ 
     model: 'Image_', 
     proxy: { 
      type: 'ajax', 
var store = new Ext.data.JsonStore({ 
     model: 'Image_', 
     proxy: { 
      type: 'ajax', 
      autoload: 'false', 
      url: '/couchdb/test/_design/blah/_view/by_surname2?startkey=%22r%22&endkey=%22r\u9999%22', 
      reader: { 
       type: 'json', 
       root: 'rows' 
        } 
     } 
    }); 
    store.load(); 




    var listView = new Ext.grid.GridPanel({ 
     width:425, 
     height:250, 
     collapsible:true, 
     title:'Simple ListView <i>(0 items selected)</i>', 
     renderTo: Ext.getBody(), 

     store: store, 
     multiSelect: true, 
     viewConfig: { 
      emptyText: 'No images to display' 
     }, 


     headers: [{ 
      text: 'File', 
      flex: 50, 
      dataIndex: 'value' 
     },{ 
      text: 'Last Modified', 
      flex: 35, 
      dataIndex: 'key' 
     },{ 
      text: 'Size', 
      dataIndex: 'id', 
      flex: 15, 
      cls: 'listview-filesize' 
     }] 
    }); 

    // little bit of feedback 
    listView.on('selectionchange', function(view, nodes){ 
     var l = nodes.length; 
     var s = l != 1 ? 's' : ''; 
     listView.setTitle('Simple ListView <i>('+l+' item'+s+' selected)</i>'); 
    }); 
}); 
+0

只需在您的代理 – stambikk 2015-09-08 09:09:48

回答

4

當您加載商店,你可以修改你的存儲限制。

​​

在這種情況下,我問到了極限設置爲50 _dc = 1299207914646是唯一緩存剋星PARAM加入到GET請求。如果您不想在url中包含它們,可以通過將disableCaching參數設置爲false來禁用它們。

但我建議你設置你存儲到POST的方法,並使用POST而不是GET方法傳遞參數。這樣你就可以擁有乾淨的URL並且隱藏正在發送的數據。

+1

+1上設置'limitParam:undefined'以禁用快取。 -1來建議POST。在修改服務器上的數據時,應該只使用POST。 – 2011-03-06 03:24:38

0

可以使用

store.proxy.limitParam=null; 
0

要解除對ExtJS的4 _dc參數可以設置修改限制PARAM:

noCache: false 

,或者如果你正在使用的建築師2只取消選中該複選框。

8

在您的代理,設置

limitParam: undefined, 
pageParam: undefined, 
startParam: undefined, 
noCache: false, 
+0

是否存在用於存儲的limitParam,startParam&pageParam的全局配置,我們可以覆蓋它? – sidrocks 2015-04-09 11:36:45

0

具體JSON的,擺脫_dc參數,在您的代理對象,設置由Tharahan給出的配置選項:

proxy: { 
    type: 'ajax', 
    api: { 
      read: 'app/data/something.json', 
      update: 'app/data/something.json' 
     }, 
    reader: { 
     type: 'json', 
     ... 
    }, 
    writer: { 
     type: 'json', 
     ... 
    }, 
    noCache: false 
} 

編輯:(對不起,我沒有看帖子的日期,但是失去了那麼多的時間)請注意,全球Ext.Loader.setConfig({disableCaching: false});不會影響子類別Ext.data.proxy.Server需要這個特定的選項(至少在開發中使用sencha touch 2.2.0)。

1

您必須設置存儲參數

pageSize : 10 

在迴應評論。 商店應該是這樣的:

var store = new Ext.data.JsonStore({ 

    pageSize : 10, //10-number of json objects 

    model: 'Image_', 
    proxy: { 
     type: 'ajax', 
     autoload: 'false', 
     url: '/couchdb/test/_design/blah/_view /by_surname2?startkey=%22r%22&endkey=%22r\u9999%22', 
     reader: { 
      type: 'json', 
      root: 'rows' 
       } 
    } 
}); 
+1

你介意擴大這個答案嗎? – 2015-12-17 22:56:26

1

您可以覆蓋Ext.data.proxy.ServergetParams方法。

例如,在項目中,我添加了自定義布爾參數embeddedParams,如果我不想ExtJS的參數添加到我將其設置爲false在商店代理的請求:

/** 
* Added embeddedParams option 
*/ 
Ext.define('Ext.lib.overrides.ServerProxy', { 
    override: 'Ext.data.proxy.Server', 

    /** 
    * Add or not pagination, grouping, sorting and filtering parameters to the request. Defaults to true. 
    */ 
    embeddedParams: true, 

    /** 
    * @private 
    * Copy any sorters, filters etc into the params so they can be sent over the wire 
    */ 
    getParams: function (operation) { 
     var me = this, 
      params = {}, 
      isDef = Ext.isDefined, 
      groupers = operation.groupers, 
      sorters = operation.sorters, 
      filters = operation.filters, 
      page = operation.page, 
      start = operation.start, 
      limit = operation.limit, 
      simpleSortMode = me.simpleSortMode, 
      simpleGroupMode = me.simpleGroupMode, 
      pageParam = me.pageParam, 
      startParam = me.startParam, 
      limitParam = me.limitParam, 
      groupParam = me.groupParam, 
      groupDirectionParam = me.groupDirectionParam, 
      sortParam = me.sortParam, 
      filterParam = me.filterParam, 
      directionParam = me.directionParam, 
      hasGroups, index; 

     if (me.embeddedParams && pageParam && isDef(page)) { 
      params[pageParam] = page; 
     } 

     if (me.embeddedParams && startParam && isDef(start)) { 
      params[startParam] = start; 
     } 

     if (me.embeddedParams && limitParam && isDef(limit)) { 
      params[limitParam] = limit; 
     } 

     hasGroups = me.embeddedParams && groupParam && groupers && groupers.length > 0; 
     if (hasGroups) { 
      // Grouper is a subclass of sorter, so we can just use the sorter method 
      if (simpleGroupMode) { 
       params[groupParam] = groupers[0].property; 
       params[groupDirectionParam] = groupers[0].direction || 'ASC'; 
      } else { 
       params[groupParam] = me.encodeSorters(groupers); 
      } 
     } 

     if (me.embeddedParams && sortParam && sorters && sorters.length > 0) { 
      if (simpleSortMode) { 
       index = 0; 
       // Group will be included in sorters, so grab the next one 
       if (sorters.length > 1 && hasGroups) { 
        index = 1; 
       } 
       params[sortParam] = sorters[index].property; 
       params[directionParam] = sorters[index].direction; 
      } else { 
       params[sortParam] = me.encodeSorters(sorters); 
      } 

     } 

     if (me.embeddedParams && filterParam && filters && filters.length > 0) { 
      params[filterParam] = me.encodeFilters(filters); 
     } 

     return params; 
    } 
}); 

用法:

store: Ext.create('Ext.data.Store', { 
    ... 
    proxy: { 
     ... 
     type: 'ajax', // or 'direct', 'jsonp'/'scripttag' 
     embeddedParams: false 
    } 
})