在运行时更改树库的extraparams

时间:2013-07-12 09:34:46

标签: extjs extjs4

我正在尝试在运行时更改treestore的extraparams。我尝试了以下(适用于普通商店而非treestore):

 myshoporders_tree_store.getProxy().setExtraParam('order_no', order_no);
 myshoporders_tree_store.reload();

由于我无法完成上述操作,我找到了这样的解决方案:

 myshoporders_tree_store.reload({
    params:{ order_no:order_no } 
 });

该解决方案的唯一问题是参数不是持久性的,即在过滤器之后,参数在商店重新加载时再次被重置,因此我不喜欢将params用于其他目的。或者我做得不对? 请帮忙。日Thnx。

我的树店:

 var myshoporders_tree_store = Ext.create('Ext.data.TreeStore', {
    autoload: false,
    model: 'myshop_order_model',
    proxy: {
        type: 'ajax',
        url: 'includes/order_cats.php',
        extraParams: {shop_id: '',cat: '',status: '',order_date: '',order_no: '',buyer_name: '',order_id: '',id: ''},
        reader: {
            root: 'orders',
            totalProperty  : 'totalCount'
        }
    },
    folderSort: false 
});

我的模特:

 Ext.define('myshop_order_model', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
        { name: 'id', type: 'string' },
        { name: 'cat', type: 'string' },
        { name: 'shop_id', type: 'string' },
        { name: 'plid', type: 'string' },
        { name: 'invid', type: 'string' },
        { name: 'rectype', type: 'string' },
        { name: 'order_number', type: 'string' },
        { name: 'order_date', type: 'string' },
        { name: 'buyer_name', type: 'string' },
        { name: 'status', type: 'string' },
        { name: 'read', type: 'string' },
        { name: 'invoice_total', type: 'string' },
        { name: 'total', type: 'string' }

    ]
});

我已经尝试过以下来自sencha论坛的例子,试图找出问题:

 var store = Ext.create('Ext.data.TreeStore', {
  fields: ['foo'],
   proxy: {
    type: 'ajax',
    url: 'data/json.json',
    extraParams: {
        one: 'one'
    }
  }
 });


 Ext.widget('button', {
    renderTo: document.body,
    text: 'Load Store',
    handler: function () {
      store.load();
 }
 });


 Ext.widget('button', {
    renderTo: document.body,
    text: 'Set Params',
    handler: function () {
        store.getProxy().setExtraParam('one', 'two');
    }
 });


 Ext.widget('button', {
   renderTo: document.body,
   text: 'Reload Store',
   handler: function () {
       store.reload();
   }
 });

我遇到的唯一问题是,在我第一次点击'load-> set params->时,不会分配额外参数。根据firebug输出重新加载。 extraparam'one'总是具有'one'的值。无论我点击多少次设置params->重装。 我必须再次点击加载以使新值可见,即 加载 - >设置参数 - >重新加载 - >加载 这是真的应该如何表现吗?单独的Reload应该能够显示新的参数值。我没有必要重新点击加载以查看新值。 请帮忙。日Thnx。

2 个答案:

答案 0 :(得分:2)

实际上非常简单,只需访问代理中的extraParams对象并更改属性即可。你的例子是这样的:

myshoporders_tree_store.getProxy().extraParams.order_no = order_no;
myshoporders_tree_store.reload();

答案 1 :(得分:-1)

抱歉,刚刚找到我的解决方案。我正在使用ext-debug-all.js导致所有这些。当我改为ext-all时,现在似乎一切都好。对于所有试图帮助的人来说,这是一个好消息。