Есть ли у 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 автоматически сгенерирует уникальный.

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