Расширяете CompositeField для использования в EditorGridPanels? - PullRequest
0 голосов
/ 16 августа 2010

Я работал над созданием EditorGridPanel для использования с несколькими адресами, но без особого успеха. Видите ли, дело в том, что клиент хотел бы хранить биты адреса отдельными частями, но в формате стандартного адреса. Таким образом, как общая текстовая область для ввода адреса, так и методы с полностью дискретными полями отсутствуют.

Здесь вступает в игру CompositeField. Я играл с расширением полей Column и Composite, чтобы редактор работал нужным образом. Дошло до того, что он вроде как работает (он отображается, если щелкнуть по нему достаточно), но выдает ошибку «this.ownerCt не определено». По некоторым поискам, я вижу, что это проблема порядка, в котором создаются экземпляры, но я не уверен, как создать экземпляр редактора позже, поддерживая его инкапсуляцию.

Код:

<code>Framework.AddressEditorField = Ext.extend(Ext.form.CompositeField,{
    initComponent: function() {
        Ext.apply(this,{
            items:[
                {name:'test',xtype:'textfield',width:50},
                {name:'test2',xtype:'textfield',width:50}
            ]
        });
        Framework.AddressEditorField.superclass.initComponent.apply(this);
    }
});

Framework.AddressEditor = Ext.extend(Ext.grid.Column,{
    width:220,
    editable:true,
    constructor: function(cfg) {
        this.editor = new Framework.AddressEditorField();
        Framework.AddressEditor.superclass.constructor.call(this, cfg);
        this.text="";
        if(!this.id){
            this.id = Ext.id();
        }
        this.renderer = this.renderer.createDelegate(this);
    },
    init : function(grid){
        this.grid = grid;

    },

    renderer : function(v, p, record){
        p.css += ' x-grid3-address-col-td';
        var template = new Ext.XTemplate("<pre class='{0}'><tpl if='careof!=\"\"'>{careof}\n</tpl>{address1}\n<tpl if='address2!=\"\"'>{address2}\n</tpl>{city}, {state} {zip}<tpl if='country!=\"\">\n{country}</tpl>
") var t = template.applyTemplate (record.data); return String.format (t, this.createId ()); }, createId: function () { return 'x-grid3-cc-' + this.id; } });

И соответствующий раздел EditorGridPanel:

{xtype:'fieldset',itemId:'mailGridFieldset',title:'Addresses',items:{
                    xtype:'editorgrid',
                    unstyled:true,
                    itemId:'mailGrid',
                    hideHeaders:true,
                    autoHeight:true,
                    width:450,
                    clicksToEdit:1,
                    defaultMailType:'Home',
                    store:this.addressStore,
                    border: false,
                    columns:[
                        {
                            editable:true,dataIndex:'address_type',editor:combo,renderer:Ext.util.Format.comboRenderer(combo)
                        },
                        new Framework.AddressEditor(),
                        defaultBoxMailing
                    ],
                    sm:new Ext.grid.RowSelectionModel()
                }}

Я уверен, что на самом деле я делаю это совершенно неправильно, учитывая, что я не нашел много примеров, расширяющих CompositeField или Column. Какие-нибудь мудрые слова?

Спасибо.

1 Ответ

0 голосов
/ 17 августа 2010

Просто обойдите его и по нажатию на ячейку отобразите модальное окно с формой, в которой пользователь может вводить / редактировать данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...