Почему добавленные записи не отображаются в сетке? - PullRequest
0 голосов
/ 21 декабря 2011

Я создал настраиваемое поле для загрузки нескольких файлов, проблема в том, что на первом шаге я даже не смог добавить выбранный файл в сетку. Скажите, в чем проблема моего кода?Я посмотрел на firebug, и нет ошибки java-скрипта.

Ext.define('VDOA.form.fields.Attachment', {
extend: 'Ext.form.FieldContainer',
mixins: {field: 'Ext.form.field.Field'},
requires: ['Ext.form.field.Base'],
alias: 'widget.attachment',
layout: 'fit',
constructor: function()
{
    var me = this;

        me.items = [
                {
                    itemId: 'grid',
                    anchor: '100%',
                    width: 300,
                    height: 100,
                    xtype: 'gridpanel',
                    layout: 'fit',
                    autoRender: true,
                    autoShow: true,
                    tbar: [
                        {
                            itemId: 'add',
                            hideLabel: true,
                            buttonOnly: true,
                            buttonText: 'Browse a file',
                            xtype: 'fileuploadfield'
                        }
                    ],
                    columns: [
                        {
                            dataIndex: 'Id',
                            xtype: 'gridcolumn',
                            text: 'File Id'
                        },
                        {
                            dataIndex: 'Title',
                            xtype: 'gridcolumn',
                            text: 'File Name'
                        }
                    ]
                }
        ];

        me.callParent(arguments);

    var store = Ext.create('Ext.data.ArrayStore', {
            fields: [
                {name: 'Id', type: 'int'},
                {name: 'Title', type: 'string'},
                {name: 'IsUploading', type: 'bool'}
            ],
            data: []
        });

        me.down('#grid').store = store;

        me.down('#add').on('change', function(o, e){
            store.add({Id: Ext.id(), Title: o.value, IsUploading: true});
            store.load();
        });
},

getErrors: function() {
    return [];
},

validate: function() {
    return true;
}});   Ext.onReady(function() {
Ext.QuickTips.init();

var win = new Ext.Window({
     width:500
    ,id:'winid'
    ,height:300
    ,layout:'fit'
    ,border:false
    ,closable:false
    ,title:'File Upload'
    ,items:[{
         xtype:'form'
        ,frame:true
        ,labelWidth:100
        ,items:[{
            name: 'Title',
            xtype: 'textfield',
            fieldLabel: 'Title',
            allowBlank: false,
            anchor: '100%'
        },
        {
            name: 'Attachment',
            xtype: 'attachment',
            fieldLabel: 'Attached Files'
        }]
    }]
    ,buttons:[{
         text:'Submit'
        ,handler:function() {
            Ext.getCmp('form').getForm().submit();
        }
    }]
});
win.show();});

Ответы [ 3 ]

1 голос
/ 21 декабря 2011
 Ext.define('VDOA.form.fields.Attachment', {
        extend:'Ext.form.FieldContainer',
        mixins:{field:'Ext.form.field.Field'},
        requires:['Ext.form.field.Base'],
        alias:'widget.attachment',
        layout:'fit',
        constructor:function () {
            var me = this,
                store = Ext.create('Ext.data.ArrayStore', {
                    fields:[
                        {name:'Id', type:'int'},
                        {name:'Title', type:'string'},
                        {name:'IsUploading', type:'bool'}
                    ],
                    data:[]
                });
            me.items = [
                {
                    itemId:'grid',
                    anchor:'100%',
                    width:300,
                    height:100,
                    store: store, // link store there... 
                    xtype:'gridpanel',
                    layout:'fit',
                    height:400,
                    autoRender:true,
                    autoShow:true,
                    tbar:[
                        {
                            itemId:'add',
                            hideLabel:true,
                            buttonOnly:true,
                            buttonText:'Browse a file',
                            xtype:'filefield'
                        }
                    ],
                    columns:[
                        {
                            dataIndex:'Id',
                            xtype:'gridcolumn',
                            text:'File Id'
                        },
                        {
                            dataIndex:'Title',
                            xtype:'gridcolumn',
                            text:'File Name'
                        }
                    ]
                }
            ];

            me.callParent(arguments);

            //me.down('#grid').store = store;

            me.down('#add').on('change', function (o, e) {
                me.down('#grid').store.add({Id:Ext.id(), Title:o.value, IsUploading:true});
                // store.load(); // remove it - it set data = [] as it was initialized before
            });
        },

        getErrors:function () {
            return [];
        },

        validate:function () {
            return true;
        }});
    Ext.onReady(function () {
        Ext.QuickTips.init();

        var win = new Ext.Window({
            width:500, id:'winid', height:300, layout:'fit', border:false, closable:false, title:'File Upload', items:[
                {
                    xtype:'form', frame:true, labelWidth:100, items:[
                    {
                        name:'Title',
                        xtype:'textfield',
                        fieldLabel:'Title',
                        allowBlank:false,
                        anchor:'100%'
                    },
                    {
                        name:'Attachment',
                        xtype:'attachment',
                        fieldLabel:'Attached Files'
                    }
                ]
                }
            ], buttons:[
                {
                    text:'Submit', handler:function () {
                    Ext.getCmp('form').getForm().submit();
                }
                }
            ]
        });
        win.show();
    });

Лут на этом фрагменте.

Как я уже говорил, магазин не был успешно связан со своей сеткой. И сохраните загруженные данные по умолчанию = [], когда появилось событие onchange. Наслаждайтесь! :)

0 голосов
/ 21 декабря 2011

Также .. Хорошей практикой является внедрение вложенных компонентов и виджетов на

initComponent

метод

Что-то вроде

initComponent: function () {var me = this;/ * ------ * / me.callParent (arguments);}

И использовать

Ext.apply

y или

Ext.applyIf

для инициализации компонента

0 голосов
/ 21 декабря 2011

Попробуйте без

store.load();

в вашем обработчике onchange.

Также проверьте магазин.Это успешно связано с магазином?

...