Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   initComponent: Как получить данные родителя и как получить store для вызова load()? (https://javascript.ru/forum/extjs/56516-initcomponent-kak-poluchit-dannye-roditelya-i-kak-poluchit-store-dlya-vyzova-load.html)

khusamov 21.06.2015 14:12

это устаревшая опция autoCreateViewport
вместо нее mainView надо юзать

Пролетарий 21.06.2015 15:08

Спасибо, буду дальше пример осиливать. Вот только как его маленьким сделать не знаю, тут по сути надо половину функционала в пример перенести, чтобы что-то походило на реальную ситуацию.

Как я понял, основная причина почему не работал пример, это отсутствие прокси с урлом в моделе. Я за основу взял https://fiddle.sencha.com/#fiddle/g56 чтобы смотреть как там сделано и повторять, но у них без прокси работает почему-то. (Ну да ладно, просто мысли в слух.)

Пролетарий 21.06.2015 15:12

Читал я в документации про это, но Sencha Cmd генерирует autoCreateViewport, хотя и взята последняя версия у меня. Пробовал переделать на mainView, но там как всегда непонятные ошибки лезут, поэтому оставил как робот сделал, а то и без этого с каждой ошибкой несколько дней на место топчусь. :)

Цитата:

Сообщение от khusamov (Сообщение 375912)
это устаревшая опция autoCreateViewport
вместо нее mainView надо юзать


khusamov 21.06.2015 15:28

Ясно. С mainView тогда позже разберемся. Мне тоже надо его внедрять скоро в проект. Руки еще не добрались.

Пролетарий 21.06.2015 17:41

Сделал пример, массу всего пришлось нагородить, но все проблемы в файле Note.js. В этом примере то что работает в реальном коде, здесь не работает, поэтому чтобы не было ошибки, закомментировал проблемный участок.

noteStore: null,
    
    initComponent: function() {
        this.callParent();
        this.noteStore = Ext.getStore('Fiddle.store.NoteStore');
        this.on('render', this.loadStore, this);
    },
    
    loadStore: function(grid) {

        var formId = grid.up('orderEdit').getViewModel().data.singleOrder;
        console.log('formId:', formId);
        //console.log(':', grid.up('orderEdit').getViewModel().getData());
        //console.log(grid.getStore());
        
        /*this.noteStore.load({
            scope: this,
            params: {
                orderid: 'тут ид родителя таблицы, но как получить?'
            }
        });*/
    },

Пролетарий 21.06.2015 17:42

Ссылка: https://fiddle.sencha.com/#fiddle/p53

Пролетарий 21.06.2015 19:03

Цитата:

Сообщение от khusamov (Сообщение 375905)
Если делать все правильно, то вызов getStore() не понадобиться.

нужно переписать так:

{
        xtype: 'noteGrid',
        fieldLabel: 'Заметки:',
        viewModel: {
            type: 'order',
            stores: { notes: { type: "notes" } }
        },
        bind: {
            store: '{notes}'
        },
    }


Т.е. помимо определения стора в ViewModel, ещё надо его прописать при определении таблицы?

У меня у формы, содержащей таблицу, есть ViewModel. К которой, я предполагаю будет обращаться и вложенная таблица. Пробовал для вложенной таблицы делать свой ViewModel, но ничего не работало. Когда убрал ViewModel таблицы и стал обращаться к ViewModel формы, то вроде заработало.
[/quote]
Цитата:

Сообщение от khusamov (Сообщение 375905)
Автолоад нужен, но грид заметок должен создаваться ПОСЛЕ выбора ордера. После закрытия вкладки ордера грид должен уничтожаться (destroy). Тогда все встанет на свои места. Тогда и автолоад заработает как нужно. Такой вариант во многих примерах сенчи расписан. То есть щелкнули по ордеру - вкладка и грид в ней и вообще все создается на лету, а при закрытии вкладки - все уничтожается.

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

Получается нужно в функции initComponent самой формы, создавать вложенную таблицу и тогда автолоад заработает? Тогда по идее можно будет создать что-то вроде переменной во вложенной таблице, куда записать ИД, из создавшей её формы. Хотя попробовал в initComponent самой формы, получить её ИД, то тоже был null. В общем как всегда, непонятки и ошибки всякие. :)

khusamov 21.06.2015 19:49

Цитата:

Т.е. помимо определения стора в ViewModel, ещё надо его прописать при определении таблицы?
Что вы подразумеваете под определением?

khusamov 21.06.2015 19:56

А что вообще должно получиться?
Я вижу пока грид с ордерами:

items:[{
            xtype: 'orderGroup',
            itemId: 'orderGroup_1',
            listeners: {
                vieworder: 'onCreateTab'
            }
        }]


Для чего нужна эта вкладка с таблицей ордеров?

Для чего нужен аккордион слева?

{
        xtype: 'panel',
        layout: {
            type: 'accordion',
            animate: true     
        },    
        collapsible: true,
        ...
    }


В общем нужно описание ФУНКЦИОНАЛЬНОСТИ вашего примера.

Пролетарий 21.06.2015 20:46

Цитата:

Сообщение от khusamov (Сообщение 375970)
Что вы подразумеваете под определением?

Вот определение стора в ViewModel:

Ext.define('JournalApp.view.orders.OrderViewModel', {
    extend: 'Ext.app.ViewModel',

    alias: 'viewmodel.order',

    requires: [
        'JournalApp.model.OrderModel',
        //'JournalApp.model.NoteModel' 
        'JournalApp.store.NoteStore' 

    ],

    data: {
        singleOrder: null
    },

    stores: {        
        notes: {
            source: 'JournalApp.store.NoteStore',
        }      
    }

});


Вот определение самой таблицы, где вы рекомендуете добавить ещё раздел стора:
{
        xtype: 'noteGrid',
        fieldLabel: 'Заметки:',
        viewModel: {
            type: 'order',
            stores: { notes: { type: "notes" } }
        },
        bind: {
            store: '{notes}'
        },
    }

Т.е. надо их так дублировать специально?


Часовой пояс GMT +3, время: 17:46.