簡體   English   中英

篩選ViewModel存儲並實現到ExtJS Panel的正確方法是什么?

[英]What is the proper way to filtering ViewModel stores and implement to ExtJS Panel?

通過ViewModel存儲,我得到了這個JSON數據。

{
    "success": true,
    "msg": "OK",
    "count": 2,
    "data": [
        {
            "firstname": "BLA",
            "lastname": "BLALA",
            "isactive": true,
            ...
        },
        {
            "firstname": "BLAAA",
            "lastname": "BLALAAA",
            "isactive": false,
            ...
        }

我在一個panel上有兩個網格 ,其中一個僅使用isactive: true加載數據isactive: true字段,其他網格僅使用false加載數據。 那么我需要在哪里以及如何過濾存儲以將指定數據加載到網格

這是VM;

Ext.define('MyApp.view.ListingVM', {
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.listing',

    requires: [...],
    reference: 'loyaltyvm',

    stores: {

        // Should I define the filter on here?
        bonusTrans: {
            storeId: 'bonusTrans',
            // reference: 'bonusTrans',
            model: 'MyApp.model.BonusTrans',
            autoLoad: true,
            session: true,
            pageSize: MyApp.Globals.LIST_PAGE_SIZE
        }
    }
});

這是panel的網格示例,其中定義了兩個網格。 我嘗試了幾種獲取store和過濾的方法,但是不能成功;

getColumns: function () {
    var me = this;

    var panelItems = [
        {
            xtype: 'container',
            layout: {type: 'hbox', align: 'stretch', pack: 'start'},
            items: [
                    xtype: 'bonustrans',
                    flex: 1,
                    title: 'Current Bonus',
                    getListCols: function () {
                        var me = this;
                        debugger;
                        // var activeStore = Ext.getStore('bonusTrans');
                        // var activeStore = me.viewModel.get('bonusTrans');
                        // var view = me.getView();
                        // var vm = view.getViewModel();
                        // var vm.getStore('bonusTrans')
                        // var activeStore = me.getViewModel().getStore('bonusTrans');

                        var activeStore = me.getViewModel('loyaltyvm').getStores('bonusTrans');
                        activeStore.filter('isactive', 'true');

                        var listCols = [
                            {
                                xtype: 'firstnamecol',
                                flex: 1
                            },
                            {
                                xtype: 'checkoutcol'
                            },
                            {
                                xtype: 'bonustotalcol'
                            }
                        ];
                        return listCols;
                    }
                    //... other Grid is just defined below of this line and it should loads data only with 'isactive' field is false.

使用連鎖商店, 擺弄

Ext.application({
    name : 'Fiddle',

    launch : function() {
        new Ext.container.Viewport({
            layout: {
                type: 'hbox',
                align: 'stretch'
            },
            viewModel: {
                stores: {
                    everything: {
                        autoLoad: true,
                        proxy: {
                            type: 'ajax',
                            url: 'data1.json'
                        }
                    },
                    active: {
                        type: 'chained',
                        source: '{everything}',
                        filters: [{
                            property: 'active',
                            value: true
                        }]
                    },
                    inactive: {
                        type: 'chained',
                        source: '{everything}',
                        filters: [{
                            property: 'active',
                            value: false
                        }]
                    }
                }
            },
            items: [{
                flex: 1,
                xtype: 'gridpanel',
                title: 'Active',
                bind: '{active}',
                columns: [{
                    dataIndex: 'name'
                }]
            }, {
                flex: 1,
                xtype: 'gridpanel',
                title: 'Inactive',
                bind: '{inactive}',
                columns: [{
                    dataIndex: 'name'
                }]
            }]
        });
    }
});

連鎖商店的方式肯定是最好的, 在這里您可以看到經典的工作方式

這是代碼:

Ext.application({
name: 'Fiddle',

launch: function () {

    var storeAll = Ext.create('Ext.data.Store', {
            storeId: 'storeAll',
            fields: [{
                name: 'firstname'
            }, {
                name: 'lastname'
            }, {
                name: 'active'
            }],
            data: [{
                firstname: 'test1',
                lastname: 'test1',
                active: true
            }, {
                firstname: 'test2',
                lastname: 'test2',
                active: true
            }, {
                firstname: 'test3',
                lastname: 'test3',
                active: false
            }]
        }),
        chainedStoreActive = Ext.create('Ext.data.ChainedStore', {
            source: storeAll,
            filters: [{
                property: 'active',
                value: true
            }]
        }),
        chainedStoreNoActive = Ext.create('Ext.data.ChainedStore', {
            source: storeAll,
            filters: [{
                property: 'active',
                value: false
            }]
        });

    Ext.create({
        xtype: 'viewport',
        layout: {
            type: 'vbox',
            align: 'stretch'
        },
        items: [{
            xtype: 'gridpanel',
            title: 'grid ALL',
            store: storeAll,
            columns: [{
                text: 'First Name',
                dataIndex: 'firstname'
            }, {
                text: 'Last Name',
                dataIndex: 'lastname'
            }],
            flex: 1
        }, {
            xtype: 'gridpanel',
            title: 'grid active',
            store: chainedStoreActive,
            columns: [{
                text: 'First Name',
                dataIndex: 'firstname'
            }, {
                text: 'Last Name',
                dataIndex: 'lastname'
            }],
            flex: 1
        }, {
            xtype: 'gridpanel',
            title: 'grid inactive',
            store: chainedStoreNoActive,
            columns: [{
                text: 'First Name',
                dataIndex: 'firstname'
            }, {
                text: 'Last Name',
                dataIndex: 'lastname'
            }],
            flex: 1
        }],

        renderTo: Ext.getBody()
    });
}

});

全局或“ Allelements”存儲區必須是全局存儲區,可以在視圖的視圖模型中創建鏈接的存儲區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM