2016-12-03 85 views
0

我想访问创建的商店内部的参数。下面是我的商店:如何使用storeId将额外参数传递给商店

Q.define('test.DataStore', Ext.data.ArrayStore, function($supr){   
return {   constructor: function(cfg) {    
$supr().constructor.call(this, {      
storeId: 'DataRule',      
data :[       
['SEARCH', 'Search')], 
['SEARCH2', 'Search2')], 
    ['SEARCH3', 'Search3')],      
]     
});    
}   
}; } 
); 

,这里是IM如何访问该商店:

items : this.section({ 
    items : [{                
store: 'DataRule' //using the store id defined in the store above       },       {        xtype : 'box',        
width : 10,   
}] 
}] 

我想有些PARAMS传递到店,即[{ID: '1'}, {id:'2'}]。我怎样才能通过params来访问店内?

谢谢!

回答

1

我让你使用ExtJS6假设你的目标是通过这些参数来筛选结果:

在你的榜样,你定义的数据前面。考虑到这一点,你应该能够使用“过滤器”的方法在商店:

// use filter method to filter the data on the front-end 
var myStore = Ext.create('Ext.data.Store', { 
    model: 'User', 
    data : [ 
     {id: '1', firstName: 'Peter', lastName: 'Venkman'}, 
     {id: '2', firstName: 'Egon', lastName: 'Spengler'}, 
     {id: '3', firstName: 'Ray',  lastName: 'Stantz'}, 
     {id: '4', firstName: 'Winston', lastName: 'Zeddemore'} 
    ] 
}); 

myStore.filter('id', '1'); 

// making use of storeId 
Ext.getStore('myStore').filter('id', '1'); 

如果从服务器(通过一个Ajax请求,例如)请求数据最简单的方式请求数据使用params为通过在负载通话将PARAMS:

Ext.define('User', { 
     extend: 'Ext.data.Model', 
     fields: [ 
      {name: 'id', type: 'string'}, 
      {name: 'firstName', type: 'string'}, 
      {name: 'lastName', type: 'string'}, 
      {name: 'age',  type: 'int'}, 
      {name: 'eyeColor', type: 'string'} 
     ] 
    }); 


    var myStore = Ext.create('Ext.data.Store', { 
     storeId: 'myStore', 
     model: 'User', 
     proxy: { 
      type: 'ajax', 
      url: '/users.json', 
      reader: { 
       type: 'json', 
       rootProperty: 'users' 
      } 
     }, 
     autoLoad: true 
    }); 

    // adding params on load 
    Ext.getStore('myStore').load({ 
     params: {id: '1'} 
    }); 

如果你想为每个负载情况下自动注入参数,你可以在“beforeload”事件创建一个侦听器,并添加PARAMS:

Ext.define('User', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     {name: 'id', type: 'string'}, 
     {name: 'firstName', type: 'string'}, 
     {name: 'lastName', type: 'string'}, 
     {name: 'age',  type: 'int'}, 
     {name: 'eyeColor', type: 'string'} 
    ] 
}); 


var myStore = Ext.create('Ext.data.Store', { 
    storeId: 'myStore', 
    model: 'User', 
    proxy: { 
     type: 'ajax', 
     url: '/users.json', 
     reader: { 
      type: 'json', 
      rootProperty: 'users' 
     } 
    }, 
    autoLoad: true, 
    listeners: { 
     // add params on every store load by injecting on the beforeload event 
     beforeload: function(store, operation, eOpts) { 
      operation.setParams({id: '1'}); 
     } 
    } 
}); 
// the beforeload event kicks off our code to inject params 
Ext.getStore('myStore').load(); 
+0

真棒ŧ hank克里斯托弗巴达卢科 – user1234

+0

很高兴你发现我的答案有帮助! –

相关问题