Intereting Posts
как установить php cookie с истечением срока действия, и если существует файл cookie, как перенаправить пользователя на другую страницу Почему мой токен доступа к твиттеру недействителен / истек Как получить доступ к веб-службе PHP из ASP.Net? Разделить строки пополам (Word-Aware) с помощью PHP Какие доступные решения для обнаружения браузера / мобильного телефона Обновить таблицу базы данных с помощью флажков, php и mysql Facebook Open Graph, требуемое свойство 'og: title' типа 'string' не было предоставлено Каков правильный формат соли blowfish с использованием склепа PHP? Существуют ли какие-либо существенные причины для использования isset () над @ в php Отправка переменных для функций файловой системы PHP с представлением формы Удалить элемент из массива, если значение элемента содержит искомый символ строки Арифметика времени PHP Проверьте, существует ли электронная почта php Как извлечь текст из документа PDF? Какой алгоритм сортировки использует PHP?

Extjs4 автозаполнения проблемы со списком

Я работаю в extjs + php для автоматического завершения свойства combobox. У меня есть вид as-

Ext.define('Balaee.view.kp.Word.Word', { extend:'Ext.form.Panel', id:'WordId', alias:'widget.Word', title:'Dictionary', items:[ { xtype : 'combobox', fieldLabel : 'Enter the word', name : 'wordtext', displayField: 'word', valueField: 'word', allowBlank : false, emptyText : 'Enter the word', enableKeyEvents : true, autoSelect: true, id : 'wordtext', triggerAction:'all', typeAhead:true, typeAheadDelay:100, mode:'remote', minChars:1, forceSelection:true, hideTrigger:true, store:'kp.WordStore', listeners: { specialkey: function (f,e) { if (e.getKey() == e.ENTER) { this.up().down('button[action=SearchAction]').fireEvent('click'); } } } }, { xtype:'button', formBind: true, fieldLabel:'Search', action:'SearchAction', text:'Search', } ] }); 

Хранилище, связанное с указанным выше полем со списком, считывает URL-адрес функции с сервера, который имеет функцию as-

 public function actionGetword() { $record1=Word::model()->findAll(); foreach($record1 as $record) { $main[]=array("wordId"=>$record->wordId,"word"=>$record->word); } echo "{ \"data\":".CJSON::encode($main)."} ";} 

Таким образом, привязка магазина к приведенному выше combobox имеет все хранилища слов в базе данных. Если я пытаюсь вставить слово «таблица» в поле выше. Когда я пишу «ta», он дает мне предложения в раскрывающемся списке. Но его отображение всех слов. Но я хочу иметь слова, начинающиеся с «ta» только в поле предложений. Итак, как я могу это изменить? Кто-нибудь может мне помочь

Solutions Collecting From Web of "Extjs4 автозаполнения проблемы со списком"

У вас есть два способа сделать то, что вы хотите. Либо вы загружаете все данные одновременно, как и в настоящее время, и фильтруете на стороне клиента, либо фильтруете данные на стороне сервера. Решение 1 вызовет только один HTTP-запрос, комбо будет очень реактивным.

Фильтрация на стороне сервера

Если вы хотите фильтровать на сервере, вы должны поймать параметр «запрос» HTTP-запроса. Это настраивается с помощью опции queryParam в поле со списком.

Например:

 $query = isset($_REQUEST['query']) ? $_REQUEST['query'] : false; $record1 = Word::model()->findAll(); $main = array(); foreach($record1 as $record) { // Only add data for records matching the query if ($query === false || substr($record->word, 0, strlen($query)) === $query) { $main[]=array("wordId"=>$record->wordId,"word"=>$record->word); } } echo "{ \"data\":".CJSON::encode($main)."} "; 

С таким сервером клиентский код должен выглядеть так:

 var store = Ext.create('Ext.data.JsonStore', { fields: ['wordId', 'word'] ,proxy: { // TODO... } }); Ext.widget('combo', { renderTo: 'comboCt' ,queryMode: 'remote' // you have this one wrong, 'mode' was in Ext 3 ,triggerAction: 'all' ,displayField: 'word' ,idField: 'wordId' ,minChars: 1 ,store: store // not needed because 'query' is the default, but you could customize that here ,queryParam: 'query' }); 

Фильтрация на стороне клиента

Для решения 1, который загружается один раз и фильтруется локально, вы должны установить queryMode в «local» и загрузить хранилище самостоятельно. Вы можете использовать метод store.load() или параметр autoLoad .

Пример кода клиента, который должен содержать слово с вашим сервером:

 var store = Ext.create('Ext.data.JsonStore', { fields: ['wordId', 'word'] ,proxy: { // TODO... } // Load the store once ,autoLoad: true }); Ext.widget('combo', { renderTo: 'comboCt' // local means the combo will work with data in the store buffer ,queryMode: 'local' ,triggerAction: 'all' ,displayField: 'word' ,idField: 'wordId' ,store: store ,minChars: 1 });