Кто-нибудь прикручивал SearchField.js ?
Пытаюсь прикрутить SearchField.js в ExtJS 4 выдает ошибку. Это токо у меня или у кого-то тоже было?
|
Никак не могу понять в чем проблема.
Скрин ошибки: ![]() Вот код окошка в котором расположено поле поиска
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' Может у кого-то есть хоть какие-то идеи как можно исправить? |
console.log(store); что выводит? |
В ставил в файл "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'
}
}
});
|
Ну вот...а теперь посмотрите на вашу ошибку и подумайте может ли быть у строки "Firms" метод getProxy()?
|
Я подумал и решил что не может. Но я не знаю как по другому передавать. Ведь в pagingtoolbar я Store передаю точно так же
{
xtype: 'pagingtoolbar',
store: 'Firms',
width: 270
}
И он прекрасно его принимает и работает с ним. Как же мне Store еще передавать в поиск? |
я не говорил что запись store: 'Firms' неверна, я вам намекнул, но вы не поняли, смотрите сюда ->http://docs.sencha.com/ext-js/4-0/#!....field.Trigger и попробуйте найти свойство store
|
Т.е. этот плагин Custom Form Fields это просто самописная цацка?
|
ну в примере ведь используется Ext.ux.form.SearchField
а у вас Ext.form.field.Trigger |
У меня используется то что в примере.
Ext.ux.form.SearchField это только путь к SearchField и он тоже наследует Ext.form.field.Trigger Мой файл поиска это файл Ext.ux.form.SearchField только он лежит в другой папке и называется по другому |
понял, а пробовали уже у store указать alias: 'widget.Firms',
а тут xtype: 'searchfield', store: Ext.widget('Firms'), params: {start: 0, limit: 16} Просто судя по ошибке он store считает строкой а не объектом... |
Цитата:
Да. Я тоже так понял. Цитата:
Не срабатывает |
а что пишет?
|
Цитата:
namespace is undefined
if (namespace === from...substring(0, from.length) === from) {
Оно так и не должно срабатывать alias : 'widget.firms', это то кошко в котором у меня форма поиска. Я пробую обратится как-то
store: Ext.getCmp('firm-list').getStore();
Но тоже что-то не так. |
а так?
var store = Ext.create('MyApp.store.Firms');
...
{
xtype: 'searchfield',
store: store,
params: {start: 0, limit: 16}
}
...
|
И так не прокатывает. Наверное какой-то баг.
|
Цитата:
|
Как решили проблему? Столкнулся с такой же проблемой. Помогите пожалуйста
|
Неужели прям 1 в 1 код как тут?
|
Цитата:
указал var store = Ext.create('MyApp.store.Object'); ошибку метода getProxy() не получаю, но есть другая проблема Uncaught TypeError: Cannot set property 'query' of undefined на строчку proxy.extraParams[me.paramName] = value; value значение в поле поиска вывожу в консоль, существует. |
extraParams не существует то.
|
Цитата:
|
Нашел вот это 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); |
Создайте отдельную тему, опишите в ней всю суть проблемы, добавьте ваш код и опишите что вы хотите получить в конце.
|
| Часовой пояс GMT +3, время: 11:57. |