Форум программистов, компьютерный форум, киберфорум
JavaScript: ExtJS
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 11
1

Ext.data.JsonStore как store в форме

27.08.2015, 18:11. Просмотров 2107. Ответов 10
Метки нет (Все метки)


Есть код:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
                            xtype: 'combo',
                            fieldLabel: 'Отдел',
                            name : 'otdel',
                            store: new Ext.create('Ext.data.JsonStore', {
                                                    
                                                    proxy: {
                                                        type: 'ajax',
                                                        url: 'php/otdel.php',
                                                        reader: {
                                                             type: 'json',
                                                                root: 'contatos',
                                                                successProperty: 'success',
                                                                
                                                        }                                                    
                                                    },
                                                    idIndex: 0,
                                                    autoload: true,
                                                    
                                                   fields: [
                                                {name: 'id'},
                                                {name: 'otdel'}
                                            ]
                                                }), 
                                                triggerAction: 'all',
                                                
 
                                            displayField: 'otdel',
                                            valueField: 'id'
                                                
                            
                        }
Проблема в следующем,когда я заходу в изменения поля,изменяю/добавляю любую другую позицию,НО не трогаю поля Отдел,в базу пытается записатся имя отдела-тестовый отдел,а не его ID как должно быть.
Если же я заного выберу тестовый отдел в поле отдел-в базу будет писаться ID,а не его имя,т.е. то что нужно.
Как сделать что бы каждый раз не приходилось заного выбирать данное поля при изменении,а получать всегда его ID?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2015, 18:11
Ответы с готовыми решениями:

Ext JS 4. Доступ к записям в Ext.Data.Store
Друзья! Я только недавно начал изучать Ext JS 4, потому еще мало что понимаю и очень надеюсь на...

Возможно ли получить от сервера простой ответ без использования data.store?
В общем, нужна просто проверка на существование поля с данными. Т.е. нужно что: Есть таблица с...

Strict Standards: Declaration of VirtueMartModelMedia::store() should be compatible with VmModel::store($data)
Strict Standards: Declaration of VirtueMartModelMedia::store() should be compatible with...

Переименовать файлы текущей папки регулярными именами: PRE0001.ext, PRE0002.ext, PRE0003.ext. (префикс, расширение)
Переименовать файлы текущей папки регулярными именами: PRE0001.ext, PRE0002.ext, PRE0003.ext, ......

10
странник
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
28.08.2015, 09:33 2
а каким образом у тебя в combobox этот тестовый отдел попадает? Значит у тебя устанавливаются начальные значения для этого поля! Если да, то для combobox следует устанавливать значение по id а не по otdel
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 11
28.08.2015, 10:57  [ТС] 3
Они там через запрос
Javascript
1
 url: 'php/otdel.php',
Javascript
1
2
                                            displayField: 'otdel',
                                            valueField: 'id'
А вот эти 2а поля как раз это и делают,одно отображает,другое значение отправляет,т.е. ID.
Проблема именно если не обновлять их,когда данные там уже есть.
0
странник
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
28.08.2015, 11:47 4
тут надо понять как все работает:
через запрос загружается в хранилище (Store) список (массив) данных. Этот массив хранится ТОЛЬКО в store. Combobox всего лишь отображает данные этого store, но никак не хранит их в себе. Combobox хранит в себе только одно значение value.
И когда вы присваиваете значение этому combobox (например через setValue( newValue ) ), он смотрит в хранилище совпадение этого значения в хранилище по свойству valueField, и если такое совпадение было, то для найденной записи в окошке будет показано значение свойства displayField.
Если совпадений не было, то в окне будет выведено присвоенное значение newValue.

Поэтому вопрос: Используется ли у тебя присваивание значения в combobox при инициализации?
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 11
28.08.2015, 12:19  [ТС] 5
Нет,нету..все что есть в комбоксе в первом посте..
Поможешь решить проблему?)не знаю как написать присваивание)
0
странник
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
28.08.2015, 12:29 6
можно попробовать установить значение по-умолчанию
Javascript
1
2
3
4
5
{
    xtype: 'combo',
    value: 0, // тут указываете id вашего тестового отдела
    ...
}
Добавлено через 40 секунд
и new уберите перед Ext.create('Ext.data.JsonStore', { ...
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 11
28.08.2015, 12:51  [ТС] 7
Есть параметр
Javascript
1
 idIndex: '0',
Но он ни как не влияет,пробывал ставить туда и 1 и 'id'

value: 0, тоже не дает эффекта,тоже пробывал и цифру и 'id'
В value не могу записать жесткий параметр,т.к. параметр должен быть тот который был выбран до этого.
Прям напасть какая то..если поле обновить(выбрать заного) отравляет id,не трогать при редактировании,отправить имя(
0
странник
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
28.08.2015, 13:20 8
я не знаю для чего idIndex - это не стандартное для ComboBox свойство (т.е. не родное от ExtJS).

Цитата Сообщение от iiism1leiii Посмотреть сообщение
В value не могу записать жесткий параметр,т.к. параметр должен быть тот который был выбран до этого.
выбран до этого - это когда?

Откуда у вас этот код для комбобокса? У меня подозрение, что значение для combobox'a все-таки устанавливается программно (вашей программой, а не стандартными методами ExtJS), но этот контроллер сидит где-то в другом месте (т.е. не в combobox)!

Добавлено через 2 минуты
и еще один вопрос: а что у тебя возвращает otdel.php ?
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 11
28.08.2015, 17:38  [ТС] 9
Там просто я получаю id и otdel запросом из бд,и вывожу их в store
0
странник
810 / 481 / 108
Регистрация: 28.05.2012
Сообщений: 1,518
Записей в блоге: 2
31.08.2015, 00:55 10
Еще раз повторяю, что через запрос загружается в хранилище (Store) список (массив) данных.
Вот рабочий пример (он же в fiddle fiddle.sencha.com/fiddle/t2c):
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
var department_store = Ext.create('Ext.data.Store',{
    autoLoad: true,
    id: 'department_store',
    fields: [
               {name: 'id'},
               {name: 'otdel'}
           ],
    proxy: {
        type: 'ajax',
        url: 'departments.json',
        reader: {
            type: 'json',
            root: 'contatos',      
        }                                                    
    },
});
 
 
Ext.onReady(function(){
    
    Ext.create('Ext.form.Panel',{
        title: 'Explain of store',
        bodyPadding: 5,
        renderTo: 'output', // it is for render this panel
        
        items: [
            {
                xtype: 'combo',
                fieldLabel: 'Department',
                name: 'otdel',
                store: department_store,
                
                displayField: 'otdel',
                valueField: 'id',
 
                listeners: {
                    render: function(combo){
                        
                        Ext.Ajax.request({
                            url: 'how_is_need_department.json',
                            method: 'POST',
                            params: {
                                need_params: '1',
                            },
                            success: function(response){
                                var data = Ext.decode( response.responseText );
                
                                if ( data.success ){
                                    combo.setValue( data.id ); // setup value to combobox
                                } else {
                                    Ext.Msg.alert('Error server', 'Error in params!');
                                }
                            },
                            failure: function(response){
                                Ext.Msg.alert('Error server', 'Unknown error!');
                            }
                        });  
                    },
                },
            },
        ],
    });
            
});
departments.json:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
    contatos: [
        {
            id: 1,
            otdel: 'Otdel #1',
        },
        {
            id: 2,
            otdel: 'Otdel #2',
        },
        {
            id: 3,
            otdel: 'Otdel #3',
        },
        {
            id: 4,
            otdel: 'Otdel #4',
        },
    ],
        success: true,
}
how_is_need_department.json:
Javascript
1
2
3
4
{
    success: true,
    id: 2,
}
0
0 / 0 / 0
Регистрация: 13.10.2014
Сообщений: 11
31.08.2015, 15:01  [ТС] 11
Я понял,что он отпрвляет текстовое поля вместо id если не обновить,но как прописать тогда жестко,что если текстовое поля,то оно равно его ID.Сбросить настройки store
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2015, 15:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Data store in Python
Разработать базу данных или хранилище данных, работающую в интерактивном режиме и предусмотреть...

Как сделать два Data Grid'а на форме?
Здравствуйте! Помогите ПЖЛ! Есть база на ms SQL, есть две таблицы связанные по одному полю,...

Как сделать поле Data пригодным для объединением в форме с текстом
Доброго времени суток! Есть таблица, в ней поле с типом данных "Дата/Время". Создаётся отчет, где...

Inport Data. в SQL форме
Стоит задача. Есть два сервера с двумя БД. БД1 и БД2. Из БД1 в БД2 надо перегнать пару таблиц....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.