Диалоговый виджет Dojo 1.6, теряющий привязку контента - PullRequest
0 голосов
/ 07 апреля 2011

Мы недавно обновили проект с Dojo 1.5 до 1.6 [для базовой поддержки IE9] и сломал один из наших виджетов. У нас есть диалоговый виджет [dijit.Dialog] с другим виджетом внутри него [любой виджет здесь будет производить то же самое поведение], ожидаемое поведение для внутреннего виджета, который будет помещен в contentNode виджета диалога, и каждая из их точек привязки будет доступно через основной виджет.

Этого не происходит, вместо этого мы находим только точку подключения диалога. Более подробная информация ниже:

Мы делаем что-то подобное в шаблоне нашего основного виджета:

<div dojoType="dijit.Dialog" dojoAttachPoint="dia_widget" 
    autofocus="true" draggable="false" open="false" preventCache="true">
    <div dojoType="dijit.form.ValidationTextBox" doLayout="false" dojoAttachPoint="val_widget">

    </div>
</div>

Это предоставляет нам родительский виджет [main_widget] с двумя точками прикрепления: dia_widget и val_widget, к которым можно получить доступ в основном виджете [после функции buildRendering ()], вызвав this.dia_widget и this.val_widget соответственно.

После обновления до 1.6.0 все пошло не так.

Я предполагаю, что когда анализируется диалоговый виджет, он удаляет domNode своего содержимого в свой новый containerNode. Когда корневому узлу назначены точки присоединения, поскольку domNode больше не доступен, он не будет добавлен.

Я отлаживал, и, как я вижу, buildRendering() вызывает _attachTemplateNodes() в dijit / _Templated.js. Это перебирает узлы в виджете, ищет их атрибут dojoattachpoint и помещает их в атрибут _attachpoints виджета.

Первый цикл состоит из двух узлов [наши dia_widget и val_widget]. В этот момент он начинает анализировать каждый узел в отдельности, начиная с вызова buildRendering () для dia_widget и находя точки присоединения всех его дочерних элементов.

В какой-то момент здесь дом main_widget изменяется, чтобы включить проанализированный / обработанный dia_widget. Затем цикл возвращается к основному узлу _attachTemplateNodes() call, где он видит dia_widget только как дочерний узел, потеряв запись val_widget. Поскольку узел не найден, он никогда не добавляется в качестве точки присоединения в main_widget, и мы не можем получить к нему доступ по линии.

Я надеюсь, что это не слишком запутанно, чтобы следовать, я новичок в Dojo, и погоня за кодом в firebug не была самым забавным опытом в мире, поэтому я написал вещи, так как они имеют смысл мне.

Мне интересно, почему поведение меняется от 1,5 до 1,6, это просто функция / параметр, который я должен передать диалогу, чтобы он вел себя так же, как раньше? Это ошибка в том, как я создаю вложенный виджет? Это [известная?] Ошибка в самом додзё?

Спасибо
Vic

1 Ответ

0 голосов
/ 08 апреля 2011

В 1.6.0 есть некоторые изменения, которые потенциально добавляют атрибут "lang" к динамически загружаемому контенту.Иногда это значение атрибута "lang" не определено и вызывает проблемы.

Проверьте, есть ли у вас проблемы с атрибутом "lang" - если это так, то это скорее всего уйдет с 1.6.1.

...