Плохая временная проблема, Telerik RadEditor контролирует события на стороне клиента и событие jquery на странице - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть объект, который я инициализирую, и я передаю параметр, который является элементом управления radeditor.

Я думаю установить некоторые события на стороне клиента radeditor, используя мой объект следующим образом:

 <telerik:RadEditor ...
   OnClientLoad="My_Object.SomeFunction" ... />

Проблема в том, что мой объект не подключен правильно, если я не поместил его в функцию готовности jquery, но, похоже, он запускается ПОСЛЕ события RadEditor, и в результате я получаю сообщение об ошибке:

My_Object is undefined

Я делаю это:

<script type="text/javascript">


 $(document).ready(function () {

  editor = $find("<%=RadEditor1.ClientID %>");

  My_Object = new MYOBJECT(editor);

 });

</script>

Вызов $find("<%=RadEditor1.ClientID %>"); всегда равен нулю, если я пытаюсь установить его вне функции готовности.

Но когда я помещаю его внутрьготовая функция My_Object создается слишком поздно, и когда я устанавливаю события на стороне клиента в элементе управления RadEditor, он говорит, что метод имеет значение null.

Как я могу решить эту проблему синхронизации?

Ответы [ 3 ]

2 голосов
/ 15 марта 2012

У меня была такая же проблема с элементами управления telerik.Вам нужно поместить логику, которую вы используете в своем $ (doucment) .ready, в page_load на стороне клиента.$ (document). Уже происходит до того, как произошел жизненный цикл page_load на стороне клиента ASP.Net, поэтому элементы управления telerik еще не будут доступны на стороне клиента.

function pageLoad(sender, e)
{ 

   editor = $find("<%=RadEditor1.ClientID %>");

    My_Object = new MYOBJECT(editor); 

}

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

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

function pageLoad(sender, e)
{ 

     if (!e.get_isPartialLoad())
     { 
         editor = $find("<%=RadEditor1.ClientID %>");

         My_Object = new MYOBJECT(editor); 
     }
}
0 голосов
/ 13 сентября 2011

$ (document) .ready () сработает до инициализации редактора. Редактор будет доступен после возникновения события init клиентской среды ASP.NET AJAX. Это происходит после кода jQuery .ready (). Вы должны создать My_Object без использования зависимости от объекта редактора, потому что вы все равно получите ссылку из обработчика функции OnClientLoad:

<script type="text/javascript">
 $(document).ready(function () {
  My_Object = new MYOBJECT();
 });
</script>

код SomeFunction () будет иметь ссылку на редактор, переданный в качестве параметра:

MYOBJECT.prototype.SomeFunction = function(editor){
//editor is a reference to the RadEditor client-side object
}
0 голосов
/ 12 сентября 2011

Вы можете поместить блок скрипта, который инициализирует ваш объект, в самый конец <body>.Вам не нужно полагаться на обработчик «ready ()», но вы также должны убедиться, что элемент DOM для вашего редактора готов для поиска и управления.(Вот почему он не работает, вероятно, когда вы не используете обработчик «ready» в скрипте в <head> - DOM не существует, когда он выполняется.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...