Проблема с получением верхнего компонента контейнера.Extjs - PullRequest
0 голосов
/ 15 ноября 2018

Когда я нажимаю на запись дерева, я пытаюсь установить значения этой записи и установить эти значения в форме.

В EventCler срабатывает функция itemclick: this.showDataFields:

....

showDataFields: function(view, record, item, index, event) {
        //got a form with fields
        var panel = view.up('maintab');
       console.log(panel)

        //var formfield   = panel.down('actionform');
        //assign values from selected record to form fields
        //formfield.loadRecord(record);

    },

..........

В этой функции view.up ('maintab') не определено.

maintab - это Ext.tab.Panel, в котором находится дерево.

Почему нельзя достать верхний контейнер и как это правильно сделать?

сделал пример в скрипке

спасибо

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вы должны использовать view.up('treepanel').nextSibling().getForm().setValues(record.data) в вашей функции showDataFields, чтобы установить эти значения в форме.

0 голосов
/ 16 ноября 2018

Вы могли бы предоставить лучший пример, поэтому в рамках предложенных ограничений.

Я получил ответ, что это были изменения в классе ActionFormTree, получившие код ниже:

Ext.define('Fiddle.view.ActionFormTree', {
    extend: 'Ext.form.Panel',
    alias: 'widget.actionformtree',
    xtype: 'actionform',//mainform,
    initComponent: function(){
        var me = this;
        Ext.apply(me,{
            items: [{
                xtype: 'form',
                border: false,
                anchor: '100%',
                height: 100,
                layout: {
                    type: 'vbox',
                    align: 'middle',
                    pack: 'center'
                },
                items: [{
                    xtype: 'textfield',
                    name: 'text',
                    fieldLabel: 'Наименование',
                    itemId: 'name_field',
                }, {
                    xtype: 'textfield',
                    name: 'code',
                    fieldLabel: 'Код',
                    itemId: 'code_field',
                }]
            }],
            buttons: [{
                text: 'Save Changes',
                scope: me,
                handler: function (button) {
                    //Эта панель со значениями полей
                    form   = me.down('form');

                    var mainpanel = me.up('#maincontainer');
                    var treeform   = mainpanel.down('usertree');
                    var sel = treeform.getSelectionModel().getSelection()[0];
                    store = treeform.getStore();

                    console.log(treeform)
                    store.suspendAutoSync()
                    var child = sel.set({
                        text: 'Измененное',
                        leaf: true
                    });

                    sel.expand()
                    store.resumeAutoSync();

                    //var currRecord = form.getRecord();

                    //if (currRecord) {
                    //    form.updateRecord();
                    //   form.reset();
                    //}
                }
            }]            
        });

        me.callParent(arguments);
    }

});

Итак, в этом примере, чтобы он заработал, вам нужно выбрать узел, который будет работать.

Надеюсь, что это поможет и завершит ваш вопрос.

Образец к вашему коду

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