События Dojo не запускаются - PullRequest
1 голос
/ 19 августа 2011

У меня есть вкладка-контейнер Dojo, и когда я нажимаю на определенные кнопки, динамически добавляется новая вкладка, содержимое которой загружается через Ajax.Вкладки содержат динамические элементы формы, которые прекрасно анализируются и загружаются Dojo.Я также включаю блоки Javascript, специфичные для каждой вкладки, которые также загружаются через Ajax ... однако ни один из блоков Javascript не выполняется!

Пример содержимого вкладки:

<input id="test" name="test" type="text" dojoType="dijit.form.ValidationTextBox" />

<script type="text/javascript">
   dojo.connect(dijit.byId('test'), 'onClick', function(evt){
       alert('testing 123');
   });
</script>

Однако, если я сделаю это вместо этого, события будут срабатывать просто отлично:

<input id="test" name="test" type="text" dojoType="dijit.form.ValidationTextBox">
    <script type="dojo/method" event='onClick'>
         alert('testing 123');
    </script>
</input>

Мой вопрос: почему не работают блоки javascript в первом примере?это ограничение додзё?Кроме того, я также пытаюсь установить свойства и значения для виджетов ПОСЛЕ того, как они были загружены.Как мне активировать это, учитывая, что я должен использовать что-то вроде dojo.addOnLoad (), которое не будет работать, потому что для этого требуется блок Javascript, и это не работает, как в первом примере ...Я также не могу использовать второй метод ... Есть идеи, как это сделать?

Ответы [ 3 ]

2 голосов
/ 20 августа 2011

«Содержимое вкладки» на самом деле является элементом Область содержимого . Вы не можете вызвать javascript внутри панели содержимого, если не используете <script type="dojo/method">. По крайней мере, это то, что я знаю.

Обновление: Если вы будете использовать dojox.layout.ContentPane вместо dijit.layout.ContentPane, все проблемы, связанные с js внутри него, исчезнут. Из справочника Dojo:

dojox.layout.ContenPane является расширением dijit.layout.ContentPane, обеспечивающим выполнение сценария, среди прочего.

0 голосов
/ 19 августа 2011

Вы должны убедиться, что виджет был проанализирован первым.Сделай так:

dojo.addOnLoad(function(){/*connect code*/});
0 голосов
/ 19 августа 2011

Похоже, вам нужно использовать dojo.hitch, чтобы ваша функция находилась в области видимости при ее фактическом вызове. Попробуйте использовать:

dojo.connect(dijit.byId('test'), 'onCLick', dojo.hitch(this, function(evt) {
      alert('testing123');
}));

Подробнее об этом можно прочитать здесь: http://dojotoolkit.org/reference-guide/dojo/hitch.html#dojo-hitch

...