Есть ли у Rally.data.custom.Store волшебная уникальность?
Я создал специальное приложение (с помощью запроса Lookback), которое обнаружило любые элементы, которые были заблокированы в течение последних N дней. Он отображает основные данные истории / дефекта, а также продолжительность "блокировки" и причину. К сожалению, некоторые истории были заблокированы не раз.
Я хотел показать строку в моей сетке отображения для каждой комбинации идентификатора истории и заблокированной причины. Однако я не мог заставить это работать - он упрямо показывал только одну строку на идентификатор (например, US1243). После бесконечной отладки я обнаружил, что мне нужно изменить имя поля в моем собственном хранилище данных. Я имел обыкновение иметь это:
// inside a loop
var data = {
id : formattedID,
name : name,
planEstimate : size,
reason : reason,
duration : roundedDuration
};
list.push(data);
// later...
var myStore = Ext.create("Rally.data.custom.Store", {
data : list,
pageSize : 100
});
// and of course I use this as the store for a rally grid
Чтобы он отображал все данные из массива list, мне просто нужно было изменить объект "data" на что-то вроде этого:
var data = {
value : formattedID,
name : name,
planEstimate : size,
reason : reason,
duration : roundedDuration
};
(Обратите внимание на замену "id" на "value". Конечно, мне также пришлось изменить ссылку "dataIndex" в сетке.)
Я искал и искал, но не нашел объяснения, почему он интерпретирует атрибут "id" как необходимый для уникальности. Это само хранилище данных? Сетки? У меня нет сил, чтобы отследить его, теперь, когда я потратил полдня на его отладку.
Есть ли какая-нибудь документация по Rally App SDK, которая могла бы объяснить это?
1 ответ
На самом деле это тонкое поведение, унаследованное от Ext. Ожидается, что все записи в магазине имеют уникальный идентификатор. Поле идентификатора по умолчанию - "id", поэтому в первом примере вы получали только одну строку для каждого идентификатора, поскольку каждый элемент в хранилище перезаписывал любой существующий элемент с тем же идентификатором. Второй пример работает, потому что идентификатор не указан, поэтому Ext автоматически сгенерирует уникальный.