Исключение DOME с помощью dojo, dgrid, TabContainer и JsonRest - PullRequest
1 голос
/ 13 февраля 2012

Это сводило меня с ума на выходные, и хотя я нашел то, что кажется приемлемым решением, мой вопрос заключается в том, есть ли что-то фундаментальное в использовании Dojo / Dijit, которое я пропускаю.

Вот проблема: всякий раз, когда я создаю страницу, на которой dgrid использует хранилище JsonRest и находится в скрытой вкладке TabContainer (та, которая изначально не выбрана), я получаю DOMExceptions и несколько облажался дгрид. В частности, dgrid имеет большое пустое пространство под последней строкой данных, а прокрутка к нижней или верхней части данных dgrid вызывает дополнительные исключения DOMExceptions.

Если я щелкаю один из заголовков столбцов для сортировки dgrid, он сбрасывает его макет и работает нормально. Если dgrid инициализируется на видимой части страницы вместо невыбранной вкладки, это нормально. Если я использую хранилище памяти вместо JsonRest, все в порядке (даже если dgrid инициализируется в скрытой вкладке). Если dgrid инициализируется на скрытой вкладке, но без хранилища, это нормально (но пусто).

Основываясь на доказательствах, я догадался, что проблема как-то связана с тем фактом, что запрос JsonRest занимает время, и по какой-то причине это нарушает работу dgrid при его инициализации. Мое решение состояло в том, чтобы создать dgrid без хранилища, а затем установить хранилище, когда будет показана вкладка, содержащая dgrid. Это кажется глупым, хотя. Я должен быть в состоянии создать dgrid с магазином и не должен возиться с ним внешне.

Итак, является ли мое несколько хакерское решение правильным (или, по крайней мере, разумным) способом для инициализации скрытой dgrid с данными, предоставленными сервером, или есть что-то в настройке TabContainer + dgrid + JsonRest, которую я ' м отсутствует?

1 Ответ

1 голос
/ 13 февраля 2012

У меня нет ответа на ваш вопрос, но между виджетами Dijit и контейнерами существует контракт относительно жизненного цикла и запуска виджета ... в частности, когда элементы добавляются в DOM и, наконец, когда метод startup() вызывается для макета и изменения размера элементов.dgrid, вероятно, не участвует.Возможно, вы можете подключить что-то к методу запуска TabContainer, который будет запускать компоновку компонента dgrid?

...