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 22.06.2015 17:07

Цитата:

Получается, что мне надо получить все заметки для всех ордеров, как происходит сейчас, но добавить к полям заметок ещё ИД их родителя, т.е. ордера, к которому относятся заметки. А уже в самой таблице, каким-то образом показывать заметки, только для ордера, который открыт в текущей закладке.
Мало чего понял, но этого точно делать не надо.

Нужно следовать следующему алгоритму:

Когда делаем даблклик по ордеру должны создаваться: вкладка, форма, хранилище для заметок данного ордера. При создании в экстра-параметрах нужно указывать номер ордера, чтобы в хранилище попали именно его заметки.

И все будет работать. Можно так открывать сколько угодно ордеров.

khusamov 22.06.2015 17:08

Цитата:

Для того что я хотел изначально, в ExtJS получается нужно создать отдельный стор с заметками для каждого ордера, т.е. если у меня 100 ордеров, то должно быть создано 100 уникальных сторов с заметками. Не знаю, насколько это правильно с точки зрения ExtJS.
Ага, так и нужно делать. Расход памяти не особо сильно увеличивается, но удобства явные.

khusamov 22.06.2015 17:09

Цитата:

Кстати, придумал как передать в таблицу заметок ИД ордера, т.е. добавил в bind переменную с ИД, во время создания таблицы.
Не так надо. Есть более простой способ. Прямо в экстра-парамс хранилища. Потом расскажу как сделать.

khusamov 22.06.2015 17:10

Цитата:

Правда получение этой перемененной внутри таблицы получается каким-то уродским:
this.getView().bind.data.lastValue.orderId
нужно так:

this.getView().getViewModel().get("orderId")


или так, если находимся в контроллере (или внутри вида)

this.getViewModel().get("orderId")

Пролетарий 22.06.2015 21:10

Цитата:

Сообщение от khusamov (Сообщение 376087)
Мало чего понял, но этого точно делать не надо.

Нужно следовать следующему алгоритму:

Когда делаем даблклик по ордеру должны создаваться: вкладка, форма, хранилище для заметок данного ордера. При создании в экстра-параметрах нужно указывать номер ордера, чтобы в хранилище попали именно его заметки.

И все будет работать. Можно так открывать сколько угодно ордеров.

Ну вот, а я только расслабился. :) А есть где-нибудь пример описанного алгоритма, а то я вроде делаю так как вижу во всех примерах, но ничего подобного не получается? А сам сообразить не могу.

Пролетарий 22.06.2015 21:13

Цитата:

Сообщение от khusamov (Сообщение 376088)
Ага, так и нужно делать. Расход памяти не особо сильно увеличивается, но удобства явные.

Но как это сделать не представляю. У меня все сторы глобальные. Скажу даже больше, если я их не объявлю в файле Application.js, то всегда лезет ошибка.

Ext.define('JournalApp.Application', {
    extend: 'Ext.app.Application',
    
    name: 'JournalApp',

    stores: [
        // TODO: add global / shared stores here
        'JournalApp.store.StrategyStore',
        'JournalApp.store.NoteStore',
        'JournalApp.store.OrderStore'
    ],
    
    launch: function () {
        // TODO - Launch the application
    }
});

Пролетарий 22.06.2015 21:26

Цитата:

Сообщение от khusamov (Сообщение 376090)
нужно так:

this.getView().getViewModel().get("orderId")


или так, если находимся в контроллере (или внутри вида)

this.getViewModel().get("orderId")

У меня не заработало, выдает null в обоих вариантах. Думаю потому что ViewModel нету у таблицы заметок. А тем способом что я сделал, получилось что ИД забиндинлся в сам view таблицы. Я этот переданный ИД даже нашел в параметре html: "<div orderId="118"></div>" если через консоль, смотрю на console.log(this.getView());

Наверное ИДу не место в вайве, но единственное что работает.

khusamov 23.06.2015 11:10

Цитата:

Но как это сделать не представляю. У меня все сторы глобальные. Скажу даже больше, если я их не объявлю в файле Application.js, то всегда лезет ошибка.
Хранилища вы верно прописали в приложении. Хотя не нужно там полное имя класса писать, можно только последнюю часть.

Но потом их надо подключать по алиасам.

Пролетарий 23.06.2015 12:33

Цитата:

Сообщение от khusamov (Сообщение 376169)
Хранилища вы верно прописали в приложении. Хотя не нужно там полное имя класса писать, можно только последнюю часть.

Но потом их надо подключать по алиасам.

У меня без полного пути туча ошибок показывается, как всегда не понятных и не известно к какому месту относящихся.

khusamov 23.06.2015 14:08

Забивайте стрелку в тимвивере+скайпе на завтра. Мне было бы удобнее после 15:00 мск. Логин в скайпе khusamov


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