У меня есть следующий код ниже, который создаст FilteringSelect и установит первый выбранный элемент:
// Store initialization:
var jsonStore = custom.store.JsonRest({ ... });
var memoryStore = dojo.store.Memory();
var myStore = dojo.store.Cache( jsonStore, memoryStore);
var dataStore = custom.store.MyObjStore({ objectStore: myStore, ... });
// FilteringSelect initialization:
var fsel = new dijit.form.FilteringSelect({
id: 'fsel',
searchAttr: 'id',
store: dataStore
});
// Setting the first item on FilteringSelect, retrieved from store objects
fsel.store.fetch({ query: {id:""},
onComplete: function (items, request) {
var val = "";
if (items.length>0) val = items[0].id;
fsel.set('value', val);
}
});
Первая проблема заключается в том, что если
items[0].id = 0
, этот элемент не установлен в FilteringSelect.fsel.store.fetch({ ... })
запрашивает сервер, и это нормально. Проблема в том, что полученные элементы не хранятся в памяти или хранятся, но не извлекаются с помощью FilteringSelect при следующем событии. Я имею в виду, что когда я в первый раз щелкаю раскрывающийся список FilteringSelect, на сервер отправляется другой запрос для получения элементов, в следующий раз они получают их из памяти.
Может ли кто-нибудь помочь мне решить эти две проблемы?
Примечание: я использую Dojo версии 1.7.2 (27913).
1 ответ
После разговора с кем-то из додзё я решил свой вопрос следующим образом:
При переходе на последнюю версию ( 1.8.1 ) эта первая проблема была устранена.
Использование memoryStore в FilteringSelect вместо хранилища кеша ( myStore ) будет просто использовать объекты в памяти. Выполнение запроса в myStore (хранилище кеша) загрузит объекты с сервера в память.
// Store initialization:
var jsonStore = new JsonRest({ ... });
var memoryStore = new Memory();
var myStore = new Cache(jsonStore, memoryStore);
// Note: ObjectStore was removed.
// FilteringSelect initialization:
var fsel = new FilteringSelect({
id: 'fsel',
searchAttr: 'id',
store: memoryStore
});
// Setting the first item on FilteringSelect and loading items to memory
when (myStore.query({id:""}),
function (items, request) {
var val = "";
if (items.length>0) val = items[0].id;
fsel.set('value', val);
}
);
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.
val = items[0].id[0];
должен это сделать. Значения магазина представлены в виде массивов.id
- это свойство объекта, и я получаю первый товар в магазине, поэтомуitems[0]
. Забыл указать версию, использую Dojo 1.7.2 (27913) .