Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Поиск в extJS (https://javascript.ru/forum/extjs/53501-poisk-v-extjs.html)

Roll 06.02.2015 13:07

Поиск в extJS
 
Как произвести поиск по 2 столбцу в подключаемом файле data.js как в примере http://docs.sencha.com/extjs/4.2.3/e...m-search.html?

Формат data.js:
var data=[{"head":["\u2116","INN","Legal_Form_Desc","Customer_Full_Nm","Source_System_Desc"],"rows":[[1,"2302042152","\u041e\u041e\u041e","\u0410\u041c\u041f\u0417 \u0411\u0410\u041a\u0410\u0420","\u0411\u0418\u0421\u041a\u0432\u0438\u0442: \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440",""],[2,"593300087432","\u0418\u041f","\u0411\u0410\u0419\u0414\u0418\u041d\u0410 \u041e\u041b\u042c\u0413\u0410 \u041f\u0410\u0412\u041b\u041e\u0412\u041d\u0410","\u0411\u0418\u0421\u041a\u0432\u0438\u0442: \u0421\u0430\u043c\u0430\u0440\u0430",""]]}];

sin_raben 06.02.2015 14:00

.find("название поля", значение для поиска);

Roll 06.02.2015 14:11

А можно поподробнее? А то я в extjs только въезжаю...
Заранее спасибо!

sin_raben 06.02.2015 14:31

Пример

Roll 06.02.2015 14:36

А если добавить поле поиска для клиентов? То есть клиенты вводят первые 6 цифр и получают результат. При этом при загрузке страницы все данные скрыты.

sin_raben 06.02.2015 15:08

Поле поиска с всплывающей подсказкой?
Grid с локальной автоматической фильтрацией?
Обращения к серверу и отображения полученных результатов?

Roll 06.02.2015 15:13

Поле поиска, как в примере http://docs.sencha.com/extjs/4.2.3/e...m-search.html? без всплывающей подсказки.
Про grid не понял. Есть просто файл с данными data.js, который лежит в той же директории.
По третьему вопросу - по сути да.

sin_raben 06.02.2015 15:27

В приведенном примере данные возращает php в Store.
Если Вы только начинаете знакомство с Ext то ознакомтесь с MVC и MVVM моделями.

Roll 06.02.2015 15:35

А вы сможете сделать готовый пример за 1000 руб?

sin_raben 06.02.2015 17:28

Я сам в Ext новичек.

freee 06.02.2015 18:11

Цитата:

Сообщение от Roll
А вы сможете сделать готовый пример за 1000 руб?

На чистом JS Вас не устроит? Думаю, разницы для Вас не будет.

novikov 07.02.2015 22:35

Если убрать proxy типа memory и параметр data, затем раскоментировать proxy типа ajax, то ваш PHP-скрипт будет получать параметр query с частью текста введённого в поле.


Пример.


var ds = Ext.create('Ext.data.Store', {
            fields: [
                {name: "id", type: "int", mapping: 0},
                {name: "inn", type: "int", mapping: 1},
                {name: "Legal_Form_Desc", type: "string", mapping: 2},
                {name: "Customer_Full_Nm", type: "string", mapping: 3},
                {name: "Source_System_Desc", type: "string", mapping: 4}
            ],
            //proxy: {
            //    type: 'ajax',
            //    url: 'http://example.com/myScript.php',
            //    reader: {
            //        root: "rows"
            //    }
            //}
            proxy: {
                type: 'memory',
                reader: {
                    root: "rows"
                }
            },
            data: {
                "head":[
                    "\u2116",
                    "INN",
                    "Legal_Form_Desc",
                    "Customer_Full_Nm",
                    "Source_System_Desc"
                ],
                "rows":[
                    [1,"2302042152","\u041e\u041e\u041e","\u0410\u041c\u041f\u0417 \u0411\u0410\u041a\u0410\u0420","\u0411\u0418\u0421\u041a\u0432\u0438\u0442: \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440",""],
                    [2,"593300087432","\u0418\u041f","\u0411\u0410\u0419\u0414\u0418\u041d\u0410 \u041e\u041b\u042c\u0413\u0410 \u041f\u0410\u0412\u041b\u041e\u0412\u041d\u0410","\u0411\u0418\u0421\u041a\u0432\u0438\u0442: \u0421\u0430\u043c\u0430\u0440\u0430",""]
                ]
            }

            
        });
        
        var panel = Ext.create('Ext.panel.Panel', {
            renderTo: Ext.getBody(),
            title: 'Search the Ext Forums',
            width: 600,
            bodyPadding: 10,
            layout: 'anchor',
    
            items: [{
                xtype: 'combo',
                store: ds,
                displayField: 'inn',
                valueField: 'id',
                typeAhead: false,
                hideLabel: true,
                hideTrigger:true,
                anchor: '100%',
    
                listConfig: {
                    loadingText: 'Searching...',
                    emptyText: 'No matching posts found.',
    
                    // Custom rendering template for each item
                    getInnerTpl: function() {
                        return '<a class="search-item" href="#">' +
                            '<h3>{inn}: {Customer_Full_Nm}</h3>' +
                        '</a>';
                    }
                },
                pageSize: 10
            }, {
                xtype: 'component',
                style: 'margin-top:10px',
                html: 'Live search requires a minimum of 4 characters.'
            }]
        });

novikov 07.02.2015 23:48

Да, если с сервера может приходить исключительно массив[], а не объект{}, то требуется несколько вмешаться в код библиотеки в указанной версии:

var myReader = Ext.create('Ext.data.reader.Json');
        
        Ext.override(myReader, {
            extractData: function(data) {
                return this.callParent([data[0].rows]);
            }
        });
        
        var ds = Ext.create('Ext.data.Store', {
            fields: [
                {name: "id", type: "int", mapping: 0},
                {name: "inn", type: "int", mapping: 1},
                {name: "Legal_Form_Desc", type: "string", mapping: 2},
                {name: "Customer_Full_Nm", type: "string", mapping: 3},
                {name: "Source_System_Desc", type: "string", mapping: 4}
            ],
            proxy: {
                type: 'memory',
                reader: myReader
            },
            data: [
                {
                    "head":[
                        "\u2116",
                        "INN",
                        "Legal_Form_Desc",
                        "Customer_Full_Nm",
                        "Source_System_Desc"
                    ],
                    "rows":[
                        [1,"2302042152","\u041e\u041e\u041e","\u0410\u041c\u041f\u0417 \u0411\u0410\u041a\u0410\u0420","\u0411\u0418\u0421\u041a\u0432\u0438\u0442: \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440",""],
                        [2,"593300087432","\u0418\u041f","\u0411\u0410\u0419\u0414\u0418\u041d\u0410 \u041e\u041b\u042c\u0413\u0410 \u041f\u0410\u0412\u041b\u041e\u0412\u041d\u0410","\u0411\u0418\u0421\u041a\u0432\u0438\u0442: \u0421\u0430\u043c\u0430\u0440\u0430",""]
                    ]
                }
            ]
        });
        
        
        var panel = Ext.create('Ext.panel.Panel', {
            renderTo: Ext.getBody(),
            title: 'Search the Ext Forums',
            width: 600,
            bodyPadding: 10,
            layout: 'anchor',
            
            items: [{
                xtype: 'combo',
                store: ds,
                displayField: 'inn',
                valueField: 'id',
                typeAhead: false,
                hideLabel: true,
                hideTrigger:true,
                anchor: '100%',
                
                listConfig: {
                    loadingText: 'Searching...',
                    emptyText: 'No matching posts found.',
                    
                    // Custom rendering template for each item
                    getInnerTpl: function() {
                        return '<a class="search-item" href="#">' +
                            '<h3>{inn}: {Customer_Full_Nm}</h3>' +
                            '</a>';
                    }
                },
                pageSize: 10
            }, {
                xtype: 'component',
                style: 'margin-top:10px',
                html: 'Live search requires a minimum of 4 characters.'
            }]
        });


Вводите INN...


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