Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Кто-нибудь прикручивал SearchField.js ? (https://javascript.ru/forum/extjs/23718-kto-nibud-prikruchival-searchfield-js.html)

Bkmz_1_ 03.12.2011 08:43

Кто-нибудь прикручивал SearchField.js ?
 
Пытаюсь прикрутить SearchField.js в ExtJS 4 выдает ошибку. Это токо у меня или у кого-то тоже было?

Bkmz_1_ 08.12.2011 16:04

Никак не могу понять в чем проблема.


Скрин ошибки:



Вот код окошка в котором расположено поле поиска

Ext.define('MyApp.view.Firms', {
    extend: 'Ext.window.Window',
    alias : 'widget.firms',
    
    id: 'all-firms',
    height: 500,
    width: 450,
    layout: 'fit',
    title: 'Предприятия города',
    modal: true,
    x: 100,
    y: 50,
    
    initComponent: function() {
       this.dockedItems = [
            {
                xtype: 'toolbar',
                dock: 'top',
                items: [
                    {
                        xtype: 'button',
                        iconCls: 'icon-add-firm',
                        text: 'Добавить'
                    }
                ]
            },
            {
                xtype: 'toolbar',
                dock: 'bottom',
                items: [
                    {
                        xtype: 'pagingtoolbar',
                        store: 'Firms',
                        width: 270
                    },
                    {
                        xtype:'tbfill'
                    },
                    {
                        xtype: 'searchfield',
                        store: 'Firms',
                        params: {start: 0, limit: 16}
                    }
                ]
            }
       ],
       this.items = [
            {
                xtype: 'gridpanel',
                border: 'false',
                id: 'firm-list',
                title: '',
                loadMask: true,
                store: 'Firms',
                columns: [
                    {
                        xtype: 'gridcolumn',
                        dataIndex: 'name',
                        flex: 1,
                        text: 'Список предприятий'
                    }
                ]
            }
        ],
        this.callParent(arguments);
    }

});


Я поместил searchfield в папку с view.
Вот содержание файла поиска

Ext.define('MyApp.view.Search', {
    extend: 'Ext.form.field.Trigger',
    
    alias: 'widget.searchfield',
    
    trigger1Cls: Ext.baseCSSPrefix + 'form-clear-trigger',
    
    trigger2Cls: Ext.baseCSSPrefix + 'form-search-trigger',
    
    hasSearch : false,
    paramName : 'query',
    
    initComponent: function(){
        this.callParent(arguments);
        this.on('specialkey', function(f, e){
            if(e.getKey() == e.ENTER){
                this.onTrigger2Click();
            }
        }, this);
    },
    
    afterRender: function(){
        this.callParent();
        this.triggerEl.item(0).setDisplayed('none');  
    },

    onTrigger1Click : function(){
        var me = this,
            store = me.store,
            proxy = store.getProxy(),
            val;
            
        if (me.hasSearch) {
            me.setValue('');
            proxy.extraParams[me.paramName] = '';
            proxy.extraParams.start = 0;
            store.load();
            me.hasSearch = false;
            me.triggerEl.item(0).setDisplayed('none');
            me.doComponentLayout();
        }
    },

    onTrigger2Click : function(){
        var me = this,
            store = me.store,
            proxy = store.getProxy(),
            value = me.getValue();
            
        if (value.length < 1) {
            me.onTrigger1Click();
            return;
        }
        proxy.extraParams[me.paramName] = value;
        proxy.extraParams.start = 0;
        store.load();
        me.hasSearch = true;
        me.triggerEl.item(0).setDisplayed('block');
        me.doComponentLayout();
    }
});


Это стандартный плагин поиска, я только поменял путь к нему на 'MyApp.view.Search'

Может у кого-то есть хоть какие-то идеи как можно исправить?

nekto_O 08.12.2011 21:40

console.log(store);

что выводит?

Bkmz_1_ 09.12.2011 07:04

В ставил в файл "MyApp.view.Search".

initComponent: function(){

	var store = this.store;
	console.log(store);

        this.callParent(arguments);
        this.on('specialkey', function(f, e){
            if(e.getKey() == e.ENTER){
                this.onTrigger2Click();
            }
        }, this);
    },


Получаю



Вот сам Store

Ext.define('MyApp.store.Firms', {
    extend: 'Ext.data.Store',

    fields: [
        {name: 'name'}
    ],
    pageSize: 16,
    storeId: 'Firms',
    proxy: {
        type: 'ajax',
        actionMethods: {
           create : 'POST',
           read   : 'POST',
           update : 'POST',
           destroy: 'POST'
        },
        url: 'firmslist',
        reader: {
            type: 'json',
            root: 'results'
        }
    }
	
});

nekto_O 09.12.2011 07:56

Ну вот...а теперь посмотрите на вашу ошибку и подумайте может ли быть у строки "Firms" метод getProxy()?

Bkmz_1_ 09.12.2011 08:16

Я подумал и решил что не может. Но я не знаю как по другому передавать. Ведь в pagingtoolbar я Store передаю точно так же

{
   xtype: 'pagingtoolbar',
   store: 'Firms',
   width: 270
}


И он прекрасно его принимает и работает с ним.
Как же мне Store еще передавать в поиск?

nekto_O 09.12.2011 09:21

я не говорил что запись store: 'Firms' неверна, я вам намекнул, но вы не поняли, смотрите сюда ->http://docs.sencha.com/ext-js/4-0/#!....field.Trigger и попробуйте найти свойство store

Bkmz_1_ 09.12.2011 09:26

Т.е. этот плагин Custom Form Fields это просто самописная цацка?

nekto_O 09.12.2011 09:49

ну в примере ведь используется Ext.ux.form.SearchField
а у вас Ext.form.field.Trigger

Bkmz_1_ 09.12.2011 10:01

У меня используется то что в примере.
Ext.ux.form.SearchField это только путь к SearchField и он тоже наследует Ext.form.field.Trigger
Мой файл поиска это файл Ext.ux.form.SearchField только он лежит в другой папке и называется по другому

nekto_O 09.12.2011 10:19

понял, а пробовали уже у store указать alias: 'widget.Firms',
а тут
xtype: 'searchfield',
store: Ext.widget('Firms'),
params: {start: 0, limit: 16}

Просто судя по ошибке он store считает строкой а не объектом...

Bkmz_1_ 09.12.2011 11:01

Цитата:

Сообщение от nekto_O (Сообщение 141568)
Просто судя по ошибке он store считает строкой а не объектом...


Да. Я тоже так понял.

Цитата:

Сообщение от nekto_O (Сообщение 141568)
store: Ext.widget('Firms'),


Не срабатывает

nekto_O 09.12.2011 11:05

а что пишет?

Bkmz_1_ 09.12.2011 11:35

Цитата:

Сообщение от nekto_O (Сообщение 141572)
а что пишет?

namespace is undefined
  if (namespace === from...substring(0, from.length) === from) {

Оно так и не должно срабатывать alias : 'widget.firms', это то кошко в котором у меня форма поиска. Я пробую обратится как-то
store: Ext.getCmp('firm-list').getStore();

Но тоже что-то не так.

nekto_O 09.12.2011 13:17

а так?
var store = Ext.create('MyApp.store.Firms');
...
{
   xtype: 'searchfield',
   store: store,
   params: {start: 0, limit: 16}
}
...

Bkmz_1_ 10.12.2011 11:41

И так не прокатывает. Наверное какой-то баг.

nekto_O 10.12.2011 13:50

Цитата:

Сообщение от Bkmz_1_
И так не прокатывает. Наверное какой-то баг.

Чудес в кодинге не бывает друг мой, нужно внимательно отслеживать что и где "взрывается"))

treasury 26.08.2014 18:14

Как решили проблему? Столкнулся с такой же проблемой. Помогите пожалуйста

Raydezm 26.08.2014 21:09

Неужели прям 1 в 1 код как тут?

treasury 26.08.2014 22:09

Цитата:

Сообщение от Raydezm (Сообщение 327656)
Неужели прям 1 в 1 код как тут?

да, только я пробую прикрутить к extjs 5
указал var store = Ext.create('MyApp.store.Object'); ошибку метода getProxy() не получаю, но есть другая проблема Uncaught TypeError: Cannot set property 'query' of undefined на строчку proxy.extraParams[me.paramName] = value;

value значение в поле поиска вывожу в консоль, существует.

Raydezm 26.08.2014 23:34

extraParams не существует то.

treasury 26.08.2014 23:53

Цитата:

Сообщение от Raydezm (Сообщение 327661)
extraParams не существует то.

что посоветуете? спасибо!

treasury 27.08.2014 11:21

Нашел вот это http://dev.sencha.com/ext/5.0.1/exam...SearchField.js
Да действительно extraParams в extjs5 не существует, по идее нужно использовать setFilterParam.

Подключил этот плагин и: Uncaught TypeError: undefined is not a function
proxy.setFilterParam(me.paramName);

Raydezm 27.08.2014 20:29

Создайте отдельную тему, опишите в ней всю суть проблемы, добавьте ваш код и опишите что вы хотите получить в конце.


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