Как получить доступ к возвращаемому значению из store.filter в extjs?
У меня есть следующий код, где я создаю магазин и запрашиваю его при загрузке, передавая значение name_holder. Так что в основном запрос будет
/query/name:name_holder*
где значение name_holder вводится пользователем. Теперь я пытаюсь получить возвращенное значение записи, но я не могу получить к нему доступ за пределами функции store.load. Правильный ли мой подход? Я новичок в ext.js и любая помощь будет оценена. Спасибо.
var store = Ext.create("Ext.data.Store", {
fields: [
{name: 'name', type: 'string'},
{name: 'id', type: 'string'},
],
proxy : name_proxy,
});
var data_names= store.load({
params : {
query : name_holder
},
callback: function(records, operation, success) {
if (success) {
var data_id= records[0].data.id;
} else {
console.log('error');
}
}
});
console.log(data_id);
Я могу получить доступ к значению data_id внутри функции, но не снаружи. Следовательно, строка console.log выдает ошибку.
1 ответ
Если реальная задача состоит в том, чтобы выяснить id
записи которого name
точно соответствует заданной строке, тогда вам не нужна вся суета с магазинами. Просто получите ваш серверный API вернуть идентификатор в ответ на запрос, как /query/name:name_holder
, Просто реализуйте AJAX-запрос, чтобы получить идентификатор.
Если вам по какой-то причине нужно придерживаться хранилищ, то лучше всего снова заставить сервер выполнить точное совпадение, чтобы он возвращал только одну запись, когда /query/name:name_holder
запрашивается. В этом случае ваш магазин будет иметь только одну запись при загрузке, и вы легко найдете его id
сюда: store.getAt(0).getId()
,
Наконец, если вы не можете или не хотите ничего касаться на стороне сервера, используйте метод запроса, чтобы отфильтровать интересующую вас запись:
store.query(
'name',
name_holder,
false, // not anymatch
true, // case sensitive
true // exact match
).getAt(0).getId();
Пример с локальными данными: https://fiddle.sencha.com/