Как получить доступ к возвращаемому значению из 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/

Другие вопросы по тегам