Extjs, синхронизирующий хранилище, дает мне URL-адрес: undefined ошибка при определенных условиях

У меня есть 4 сетки с включенным плагином перетаскивания. Их начальная сетка зависит от значения из db, называемого state_id.

Когда я отбрасываю выбранную строку в новую сетку, я обновляю значение state_id, а затем сообщаю ей синхронизировать с db и обновлять значение для рассматриваемого элемента.

enter image description here

Это работает отлично по большей части. Я получаю этот URL undefined при возникновении следующих событий

  • Пользователь перетаскивает строку A из сетки 1 к сетке 2
  • Пользователь перетаскивает строку A из сетка 2 в сетку 1
  • ОШИБКА! Веб-сайт undefined.

Эта ошибка возникает только тогда, когда первый элемент, добавляемый в сетку, первоначально поступает из одной и той же сетки.

  • Пользователь перетаскивает строку A из сетки 1 в сетку 2
  • Пользователь перетаскивает строку B из сетки 2 в сетку 1
  • Пользователь перетаскивает строку A из сетки 2 в сетку 1
  • Работает по назначению!

обработчик события drop внутри моего контроллера:

dropit: function (node, data, dropRec, dropPosition) {
    if (node.dragData.records[0].store.$className == "AM.store.BacklogCards")
    {
        data.records[0].set('state_id', 1);
        this.getBacklogCardsStore().sync();
    }
    else if (node.dragData.records[0].store.$className == "AM.store.InprogressCards")
    {
        data.records[0].set('state_id', 2);
        this.getInprogressCardsStore().sync();
    }
    else if (node.dragData.records[0].store.$className == "AM.store.ReviewCards")
    {
        data.records[0].set('state_id', 3);
        this.getReviewCardsStore().sync();
    }
    else
    {
        data.records[0].set('state_id', 4);
        this.getDoneCardsStore().sync();
    }
    //node.dragData.records[0].store.sync();
},

Любые идеи о том, что вызывает это и как его исправить?

Спасибо

Ответ 1

Могу ли я предположить, что вы используете одно хранилище вместо трех и просто добавляете три равные сетки, все используют один и тот же магазин, но с фильтрацией по состоянию =?

Таким образом, вы можете просто обновить статус при удалении, обновить две связанные решетки и синхронизировать одно хранилище.

Ответ 2

Похоже, всякий раз, когда вы вызываете функцию dropit, вы только синхронизируете один магазин. Разве вы не должны синхронизировать магазин, из которого пришел товар, и в хранилище, на котором оно было упаковано? Мне кажется, что записи удаления phantom все равно будут висящими в оригинальном хранилище, это приведет к появлению двух записей при перетаскивании этой записи, поскольку из хранилища никогда не синхронизировалось, чтобы удалить эту запись.