У меня была подобная проблема, но мой был то, что у меня была смесь исходных данных XML, некоторым из которых определили пространство имен и других, которые не сделали. Для упрощения моей проблемы, я выполнил следующий отрывок JDOM после загрузки документа.
for (Element el : doc.getRootElement().getDescendants(new ElementFilter())) {
if (el.getNamespace() != null) el.setNamespace(null);
}
После удаления всех пространств имен я смог использовать простой getChild ("elname") навигация стиля или простые запросы XPath.
я не рекомендовал бы эту технику как общее решение, но в моем случае это было определенно полезно.
Поскольку bmoueskau предоставил довольно полнофункциональную реализацию, я подумал, что может помочь более простой пример.
var store = new Ext.data.JsonStore({
url: '/your/ajax/script/',
root: 'data', // the root of the array you'll send down
idProperty: 'id',
fields: ['id','value']
});
var combo = new Ext.form.ComboBox({
store: store,
displayField:'value',
typeAhead: true,
mode: 'remote',
queryParam: 'query', //contents of the field sent to server.
hideTrigger: true, //hide trigger so it doesn't look like a combobox.
selectOnFocus:true,
width: 250,
renderTo: 'autocomplete' //the id of the html element to render to.
//Not necessary if this is in an Ext formPanel.
});
Магазин будет принимать ответы от вашего сервера в таком формате:
{
"success": true,
"data": [
{
"id": 10,
"value": "Automobile"
},
{
"id": 24,
"value": "Autocomplete"
}
]
}
Конечно , вы также можете создать свой магазин с Ext.data.XMLReader, если это вам больше нравится.
Надеюсь, это поможет вам начать. Я не могу не подчеркнуть великолепие документации Ext . В нем есть несколько подходящих примеров в дополнение к примерам combobox , которые я активно использовал, когда впервые сделал несколько автозаполнений.
Не существует отдельной функции автозаполнения, которую можно было бы привязать к входам в общем случае - вы бы просто использовали элемент управления ComboBox с фильтрацией на стороне сервера (вы можете использовать конфигурацию hideTrigger: true, чтобы он по-прежнему выглядит как обычный ввод). Вероятно, это наиболее близкий пример того, что вам нужно: