Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Работа с примером MVVM (https://javascript.ru/forum/extjs/56199-rabota-s-primerom-mvvm.html)

kolka 04.06.2015 10:52

Работа с примером MVVM
 
Всем привет.

Стараюсь активно изучать ExtJS. Сложно, но можно.. :)
Начал делать небольшую задачку, первую для себя, и как обычно столкнулся с проблемой, скорее из-за незнания..

За пример взял это

Вот что у меня получается.

Суть проблемы в следующем.
Не получается отобразить данные в форме при редактировании Пользователя 2. При нажатии на кнопку Редактировать данные отображаются только для Пользователя 1.

В консоли появляется какая-то ошибка..

Помогите понять почему так ..
Спасибо.

khusamov 04.06.2015 12:49

Нифигасе .... создали такой сложный скрипт а разобраться в простой ошибке не можете... вы ли это писали???

Ошибка говорит о том, что у вас в контроллере класса FiresAPP.view.security.UserForm нет метода onSave.

Решение: создайте контроллер для класса FiresAPP.view.security.UserForm и сделайте в нем метод onSave.

Вот вы написали следующее:

xtype: 'button',
text: 'Сохранить',
listeners: {
	click: 'onSave'
}


Вопрос, а куда этот клик click: 'onSave' должен переадресовываться?

то ли недописали... толи пропустили... разбирайтесь!

kolka 04.06.2015 14:33

khusamov,
спасибо за ответ.. НО Вы меня не правильно поняли.. вопрос:
Цитата:

Сообщение от kolka
Не получается отобразить данные в форме при редактировании Пользователя 2. При нажатии на кнопку Редактировать данные отображаются только для Пользователя 1.

Проблема не с сохранением данных, а с редактированием...

onSave - пока просто не написан..

khusamov 05.06.2015 04:23

в методе createDialog
поставим строку

console.log(record.get('id'))

и видим что там выводится вместо id эземпляр класса FiresAPP.view.security.User

хотя ожидается номер (id)... потому такая ошибка

вопрос - как эта хрень туда попала?

khusamov 05.06.2015 04:27

кстати, для первого пользователя тоже вместо id выдается запись...

khusamov 05.06.2015 04:30

таак... предыдущие два поста считать недействительными... похоже уже сплю на ходу. Надо пример ваш упрощать! Иначе так не выловить. Завтра разберусь.

khusamov 05.06.2015 16:03

Разобрал ваш пример на кусочки
https://fiddle.sencha.com/#fiddle/o4e
так будет удобнее отлавливать багу

kolka 05.06.2015 17:01

У меня вот такая зараза...

IMG

... при нажатии на кнопку редактирование ...

khusamov 05.06.2015 17:29

да, я уже нашел эту ошибку... странная какая-то
щаз сижу думаю что не так

а код у вас любопытный. Например:

bind: {
        store: 'users'
    },


вместо такого:

bind: {
        store: '{users}'
    },


Не понятно почему без фигурных скобок работает

И еще вот этот (FiresAPP.model.security.Base):

rootProperty: 'data'


хотя в файле users.json нет корневого data... тоже непонятно как работает...

khusamov 05.06.2015 17:50

Вопрос, а этот код только в песочнице НЕ работает или также если его из песочницы вытащить и так воспроизвести? Чтобы исключить, что сама песочница содержит ошибку...

kolka 05.06.2015 17:57

Не работает ни в песочнице ни в реале.. :(

khusamov 05.06.2015 21:22

Совсем все плохо... перенес к себе на комп, у меня поля формы вообще не заполняются из вьюмодели

Интересно, а где взять весь код примера?
http://dev.sencha.com/extjs/5.1.0/ex...-child-session

чтобы его пощупать отдельно...

khusamov 05.06.2015 22:33

Итак кое что удалось накопать.

1) в песочнице явно что-то не так с имитацией AJAX-запросов. Из-за чего такая ошибка вылетает: Uncaught Error: Invalid record id returned for 2@User

2) я переделал хранилище с AJAX на ARRAY, чтобы было оно в памяти, чтобы не было необходимости имитировать AJAX-запросы

После этого вышеупомянутая ошибка пропала наконец. Но к сожалению поля формы не заполняются. Ровно такая же проблема и у меня на компе.

Я убрал links.

Было так:
me.dialog = view.add({
            xtype: 'user-form',
            viewModel: {
                data: {
                    title: record ? 'Редактирование: ' + record.get('name') : 'Добавить пользователя'
                },
                links: {
                    currentUser: record || {
                        type: 'User',
                        create: true
                    }
                }
            }
        });


Стало так:
me.dialog = view.add({
            xtype: 'user-form',
            viewModel: {
                data: {
                    title: record ? 'Редактирование: ' + record.get('name') : 'Добавить пользователя',
                    currentUser: record
                }
            }
        });


Теперь все работает.

Вот моя песочница:
https://fiddle.sencha.com/#fiddle/o4e

ПОСТСКРИПТУМ:

Почти в тему (так как это происходит именно в этой теме) и не совсем по теме (так как никак не связано с описываемыми проблемами):

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

Uncaught Error: adsbygoogle.push(): All ins elements in the DOM with class=adsbygoogle already have ads in them.

gd	@	pagead2.googlesyndication.com/pagead/js/adsbygoogle.js:54
hd	@	pagead2.googlesyndication.com/pagead/js/adsbygoogle.js:55
(anonymous function)	@	pagead2.googlesyndication.com/pagead/js/adsbygoogle.js:55
(anonymous function)	@	pagead2.googlesyndication.com/pagead/js/adsbygoogle.js:55

khusamov 05.06.2015 22:35

Возникает вопрос, зачем эти линки, если и так все работает? И почему эти линки не работают? Но это я уже отдельным постом заделаю. Правда не скоро.

khusamov 05.06.2015 23:02

Кстати, есть проблема. Там в форму передается ссылка на выделеную запись для редактирования. И когда мы ее отредактировали, то отменить выделения не получится. Ибо они уже в хранилище отобразились. Как отменить - не знаю. Вроде по идее нужно копию записи делать и ее редактировать. Или делать по старинке без bind (с использованием form.updateRecord()). Как у них в примере это работает - ума не приложу...

Хмм... может для этого линки и были нужны?

В связи с этим обстаятельством код корректирую:

me.dialog = view.add({
            xtype: 'user-form',
            viewModel: {
                data: {
                    title: record ? 'Редактирование: ' + record.get('name') : 'Добавить пользователя',
                    currentUser: record ? record.copy() : new FiresAPP.model.security.User
                }
            }
});

kolka 09.06.2015 12:37

khusamov,
Большое спасибо за развернутый ответ.. с большего понимаю как все работает.. дальше буду сей пример под себя модифицировать..

p.s. ваша помощь очень помогает разобраться...


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