2009-05-17 2 views
0

Это мой первый bash при использовании extJS, и после нескольких часов боев некоторые вещи работают нормально, за исключением того, что у меня есть списки комбо, которые я не могу отфильтровать до менее чем 2000 элементов в поэтому я пытаюсь перечислить списки удаленно, но я должен делать что-то неправильно.Загрузка extJS Combo удаленно не работает

Мой магазин данных и комбо выглядеть следующим образом:

var remoteStore = new Ext.data.JsonStore({ 
     //autoLoad : true, 
     url   : 'addition-lists.aspx', 
     fields  : [{name: 'extension_id'}, {name: 'extension'}], 
     root  : 'extensionList', 
     id   : 'remoteStore'    
    }); 
. 
. 
         xtype   : 'combo', 
         fieldLabel : 'Remote', 
         name   : 'remote', 
         displayField : 'extension', 
         valueField : 'extension_id', 
         mode   : 'remote', 
         //pageSize  : 20, 
         triggerAction : 'query', 
         typeAhead  : true,      
         store   : remoteStore, 
         anchor  : '95%' 

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

Моя страница ASP.NET возвращения JSON как это:

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Clear(); 
    Response.Write(GetRemote()); 
} 

ответ

2

В удаленных хранилищах комбо по умолчанию свой minChars свойство равно 4, поэтому запрос отправляется только после ввода 4 символов. Установка minChars почти дает желаемое поведение.

Я говорю почти потому, что даже если элемент, запрошенный автозаполнением, находится на текущей странице, по-прежнему отправляется новый запрос на сервер, по умолчанию выбор первого элемента на новой странице.

-1

Вы должны установить прокси-сервер, то есть набор

proxy: new ScriptTagProxy

Недвижимость для загрузки 'магазина' удаленно. Посмотрите примеры для точного синтаксиса.

EDIT: Пожалуйста, не обращайте внимания на мою предыдущую заметку, так как вы используете ярлык JsonStore.

Попробуйте применить все эти свойства к вашему комбо:

typeAhead: true, 
    typeAheadDelay: 500, 
    triggerAction: 'all', 
    selectOnFocus:true, 

И пожалуйста, не делать на стороне сервера предвыборку записей (с помощью LoadData). Это очень сильно вредит внутреннему фильтру, так что вы придерживаетесь отфильтрованных записей из разных предварительных настроек. С другой стороны, если вы делаете предварительную выборку всех записей на стороне сервера, зачем вам нужен удаленный доступ для комбо?

0

Несколько вещей. Во-первых, при этом:

remoteStore.loadData (<% = GetRemote()%>);

Вы фактически не делаете удаленный вызов со своего javascript. Вы повторяете результат вызова функции сервера GetRemote непосредственно на странице в времени рендеринга. Наверное, не то, что вы намерены? Если GetRemote записывает ваши комбинированные данные (и работает корректно), вы должны иметь возможность использовать комбо-настройку для местных данных. Если намерение состоит в том, чтобы сделать удаленный вызов, вам нужно удалить тег сервера и загрузить данные через URL-адрес прокси, как показано в нескольких примерах, которые прилагаются к Ext.

Другое дело, что ваш код Page_Load на самом деле ничего не показывает о том, как вы загружаете, форматируете или возвращаете свои данные. Я бы предложил просмотреть источник и проверить, что ваш тег фактически заменяется данными, которые вы ожидаете.Если/когда вы переключите его на настоящий удаленный вызов для загрузки данных, вы можете использовать Firebug для проверки ваших вызовов XHR и проверки данных, поступающих таким образом.

+0

@bmoeskau: Извинения, что вызов «loadData» остался после моей отладки - это было просто для проверки того, что все работает локально. Пожалуйста, см. Мой ответ выше для реальной проблемы. – ProfK

1

, как вы настроили свой магазин выше, результат от вашего ASP скрипта должен читать что-то вроде этого:

{"extensionList": [ 
    {"extension_id": 1, "extension": "js"}, 
    {"extension_id": 2, "extension": "aspx"} 
]} 

Если это не выглядит так, ваш удаленный магазин ничего не найдет.

Смежные вопросы