Возникли проблемы при обновлении Gridx с помощью JsonRest

Когда учетная запись выбрана, я хотел бы показать все связанные контакты в contactGrid. Я могу сделать это с XhrGet, но я хотел бы использовать JsonRest.

Вот как я настраиваю Grid:

function contactTabSetup() {
  var structure = [{ field: 'id', name: 'Id', width: '5em' },
                   { field: 'firstName', name: 'First Name', width: '12%' },
                   { field: 'lastName', name: 'Last Name', width: '12%' },
                   { field: 'email', name: 'Email', width: '12%' },
                   { field: 'description', name: 'Description' },
                   { field: 'mobileNumber', name: 'Mobile Phone', width: '12%' }];

  var contactGrid = new Grid({
    id: 'contactGrid',
    pageSize: 20,
    cacheClass: Cache,
    structure: structure,
    noDataMessage: "No contacts found",
    modules: [SingleSort]}, contactTab);

  contactGrid.startup();
}

Вот как я хочу заполнить сетку:

function contactLoad(acctIds) {
  var grid = registry.byId("contactGrid");
  grid.model.clearCache();
  grid.setStore(JsonRest({target:"//localhost:8080/program/contacts/byAccount/" + acctIds}));
  grid.body.refresh();
}

Правильный ответ Json возвращается (как видно на консоли):

{
    "description": "Mike is a cool guy",
    "email": "mike@mike.net",
    "firstName": "Mike",
    "id": 1503,
    "lastName": "Smith",
    "mobileNumber": "555-555-5555"
}

... но я не могу получить сетку, чтобы показать новые данные.

Любая помощь будет оценена! Спасибо


Я пробовал много дополнительных способов, но безуспешно... Вот где я застрял - не уверен, что еще можно попробовать. Я делаю вызов JsonRest, возвращаю объект Json и распечатываю его на консоль. Видя, что ответ json выглядит хорошо, я пытаюсь установить setStore и выдается эта ошибка: "s.query не является функцией в dojo.js" (строка 382). Это ошибка, или я что-то упустил? Спасибо.

// s.query is not a function in dojo 10.0.1
grid.model.clearCache();
var store = new JsonRest({target:"//localhost:8080/program/contacts/byAccount"});
store.get(acctIds).then(function(items){
  console.log(items);
  grid.setStore(items);
});
grid.body.refresh();

Я нашел это. Изменить:

grid.setStore(items);

в

grid.setStore(new ItemFileReadStore({data: {items : result}}));

Кто-нибудь знает, как просто использовать JsonRest и не включать ItemFileReadStore? Спасибо Крис

1 ответ

Мой маленький совет - попытаться настроить магазин один раз и использовать вместо него фильтр.

grid.filter({"acctId":"..."});

Второе - хранилище иногда требует определения idAttribute, т.е.

JsonRestStore({target:"...", idAttribute:"id"});
Другие вопросы по тегам