ExtJs 6: Как связать данные между двумя сетками? - PullRequest
0 голосов
/ 08 января 2019

На моей главной панели (Main.js) есть 3 элемента:

  1. Форма (отображение данных из выбранной строки таблицы 1)
  2. Grid1 -Ext.grid.Panel (который получает данные из файла JSON)
  3. Grid2 -Ext.grid.Panel (должны отображать некоторые столбцы из выбранной строки в Grid1)

Все 3 представления имеют один и тот же файл MainModel.js, связанный с Main.js.

Я могу связать данные Grid1 с формулой:

formulas: {
    someVal: {
        bind: '{employeeDetails.selection}',  //reference to grid1
        get: function(item){
            return item;
        }
    },

* 1016 Бланк-*

items:[
        {
            xtype: 'form',
            title: 'Form',
            defaultType: 'textfield',
            items: [
                {
                    xtype: 'displayfield',
                    fieldLabel: 'ID',
                    bind: '{someVal.id}'
                }, //...

Но я не могу найти способ сделать то же самое между Grid1 и Grid2. Я гуглил часами. Кажется, хранится только источник данных для сетки ExtJs. По сути, есть ли способ заполнить сетку, кроме использования магазина. Можем ли мы использовать связывание внутри столбцов или что-то? Спасибо.

EDIT: обновлена ​​формула выбора:

myStoreDataFormula: {
    bind:{
        bindTo:'{employeeDetails.selection}',
        deep:true
    },
    get: function(employee){
        if(employee!=null){
            var empArray = [];
            empArray.push(employee.data);
        return empArray;
        }
    }
}

1 Ответ

0 голосов
/ 08 января 2019

Несколько неясная особенность при использовании хранилища, определенного внутри модели представления, заключается в том, что вместо определения конкретных значений вы можете использовать усы '{...}' для привязки к другим полям / формулам модели представления или к конфигам компонентов, которые являются опубликовано по их ссылке (лично я нашел это наиболее полезным для помещения переменных пути в URL прокси магазина).

Вот пример сетки, привязанной к хранилищу, которая, в свою очередь, имеет свои данные, привязанные к формуле:

Ext.define('MyView', {
    viewModel: {
        stores: {
            myStore: {
                fields: ['name'],
                data: '{myStoreDataFormula}'
            }
        },
        formulas: {
            myStoreDataFormula: function(get) {
                return [{
                    name: 'Foo'
                }, {
                    name: 'Bar'
                }];
            }
        }
    },

    extend: 'Ext.grid.Panel',
    xtype: 'MyView',
    bind: {
        store: '{myStore}'
    },
    columns:[{
        dataIndex: 'name',
        flex: 1
    }]
});

Ext.application({
    name : 'Fiddle',

    launch : function() {
        Ext.create({
            xtype: 'MyView',
            width: 300,
            height: 300,
            renderTo: Ext.getBody()
        });
    }
});

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

...