Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Для чего необходима ViewModel в примере (https://javascript.ru/forum/extjs/77585-dlya-chego-neobkhodima-viewmodel-v-primere.html)

Ambassador 23.05.2019 12:31

Для чего необходима ViewModel в примере
 
Всем привет.
Нашел интересный пример реализации редактирование записей грида в окне.
У меня возникает вопрос: Для чего именно, в этом примере, используется ViewModel:
Ext.define('NJDHV10.view.UserFormModel', {

    extend: 'Ext.app.ViewModel',

    alias: 'viewmodel.userformvm',

    data: {
        userData: null
    }
});


Я понимаю что Ext.window.Window использует эту ViewModel, но почему так реализовано, и возможно ли обойтись без этой ViewModel?
Спасибо

Infarch 24.05.2019 10:14

Суть в том, что надо передать значения из экземпляра 'NJDHV10.model.UserModel' в редактор. Если бы там была настоящая форма (Ext.form.Panel) то можно было бы вызвать ее метод loadRecord. Но автор фидла использовал окно, в котором такого метода нет. Значит самым простым решением для передачи данных служит как раз вью модель.

Ambassador 28.05.2019 08:54

Получается что если в Ext.window.Window установить xtype: 'form' с полями, то промежуточная вьюха и не потребуется для загрузки значений записи в окне?

Infarch 28.05.2019 12:42

Ну не прямо так просто... Вьюмодель обеспечивает двустороннее связывание: вы видете изменения в гриде прямо в процессе редактирования. В случае формы вам надо будет юзать updateRecord чтоб применить изменения. И по большому счету форма нужна там где ее будут сабмитать. Тут такого нет, передать изменения на сервер можно и из стора грида. Надо смотреть на конкретный кейс и уже тогда решать какие компоненты юзать.
Ну а как пример эксплуатации вьюмоделей и двустороннего связывания - очень полезный фидл.

Ambassador 29.05.2019 08:56

Infarch - спасибо за разъяснение. Теперь понимаю что меня не туда понесло, мне просто нужен грид и создание/редактирование его записей в окне без какого либо двухстороннего связывания. Сейчас взял Ext.window.Window
а в нем указал:
...
items: [{
    	xtype: 'form',    	
			items: [
...

Пока полет нормальный)))

А в чем суть двухстороненного связывания? Для чего оно требуется кроме как моментальное отображение изменений.

Infarch 29.05.2019 10:26

В осовном для динамического переключения разных компонентов без тыка в специальные кнопки. Есть хороший официальный пример: https://docs.sencha.com/extjs/6.7.0/...wo_way_binding

А еще - для удовлетворения хотелок заказчиков в энтерпрайзе. Они любят чтоб все шевелилось и подмигивало :)

Pavel M. 29.05.2019 12:32

Цитата:

Сообщение от Ambassador
мне просто нужен грид и создание/редактирование его записей в окне без какого либо двухстороннего связывания. Сейчас взял Ext.window.Window

Хватит и обычной Ext.form.Panel с floating: true

И там обычная загрузка записи в форму form.loadRecord(rec);

Недавно делал тестовое задание для одной организации.
Возможно пригодится
https://fiddle.sencha.com/#view/editor&fiddle/2s73
пароль там остался: 123

Ambassador 29.05.2019 17:16

Pavel M - за пример спасибо. Уверен что пригодится


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