Sencha Touch - 如何将不同的过滤器应用于一个商店以用于不同的用途?

时间:2011-10-18 23:39:24

标签: sencha-touch extjs

只是想知道有没有办法在Sencha Touch中处理它。 一个商店,在应用不同的过滤器后,商店可以用于不同的地方。

例如:

我有一家商店:

Ext.regModel('abc', {
    fields: [{name: 'tid', type: 'int'}, {name: 'name',  type: 'string'}, {name: 'parent', type: 'int'}]
});

var store = new Ext.data.Store({
     model: 'abc',
     proxy: {
        type: 'ajax',
        url : 'read.php',
        reader: {
            type: 'json',
            root: 'items',
            fields: ['tid', 'name', 'parent']
        }
    },
    autoLoad: true,
});

在FormPanel中,它有两个选择字段:

items: [
    {
        xtype: 'selectfield',
        name : 'One',
        label: 'Category',
        // store: store, <-- Load the whole store
        store: function(){
            store.filter('name', 'digital'); <-- Load part of store
        },
        displayField: 'name',
        valueField: 'tid'
    },{
        xtype: 'selectfield',
        name : 'Two',
        label: 'subCategory',
        // store: store, <-- Load the whole store
        store: function(){
            store.filter('parent', 1); <-- Load part of store
        },
        displayField: 'name',
        valueField: 'tid'
    },{
    ...}
]

1 个答案:

答案 0 :(得分:3)

不要害怕,你需要两个商店实例。

为什么不扩展您的商店,只是为了使其预先配置如下:

Ext.regModel('abc', {
fields: [{name: 'tid', type: 'int'}, {name: 'name',  type: 'string'}, {name: 'parent', type: 'int'}]});

MyStore = Ext.extend(Ext.data.Store, {
constructor: function(config) {

config = Ext.apply({

 model: 'abc',
 proxy: {
    type: 'ajax',
    url : 'read.php',
    reader: {
        type: 'json',
        root: 'items',
        fields: ['tid', 'name', 'parent']
    }
},
autoLoad: true,
}, config);

MyStore.superclass.constructor.call(this, config);

}

})

然后,您可以使用商店的多个实例并按照您的需要进行过滤:

items: [
{
    xtype: 'selectfield',
    name : 'One',
    label: 'Category',
    store: new MyStore(), //1st instance of MyStore
    displayField: 'name',
    valueField: 'tid',
listeners : {
   'render' : function(){
        this.store.filter('name', 'digital');
    }
}
},{
    xtype: 'selectfield',
    name : 'Two',
    label: 'subCategory',
    store: new MyStore(), //2nd instance of MyStore
    displayField: 'name',
    valueField: 'tid',
listeners : {
   'render' : function(){
        this.store.filter('parent', 1);;
    }
}
},{
...}