Вот как бы я это сделал:
Создайте функцию, которая выполняет логику рендеринга/модификации, которую вы в настоящее время хотите выполнять в событии beforeexpand
.
В этой функции установите пользовательское свойство на панели, чтобы вы знали, что оно отображается/модифицируется в соответствии с вашей логикой, например. myPanel.isPrepared = true;
.
Кроме того, в самом конце этой функции сделайте еще один вызов myPanel.expand();
Затем в обработчике beforeexpand
поместите условие, которое проверяет, были ли выполнены ваши рендеринг/модификации, например, if (myPanel.isPrepared) {...
Если пройдет, то ничего не делайте в обработчике и дайте панели расшириться.
Если он не проходит, вызовите функцию, упомянутую выше, а затем return false;
, которая остановит расширение панели, ваша функция выполнит необходимый рендеринг/модификацию, которую вы хотели, а затем вызовет расширение, когда все будет готово. сделано.
Предполагая, что вы не создаете свое приложение с шаблоном MVC, обработчик и функция могут выглядеть примерно так:
myPanel.on('beforeexpand`, function() {
if (!myPanel.isPrepared) {
prepareMyPanel();
return false;
}
})
function prepareMyPanel() {
// rendering / modification logic here...
myPanel.isPrepared = true;
myPanel.expand();
}
Если вы создаете свое приложение с шаблоном MVC, вы сможете перевести его на правильные обработчики контроллера.
22.06.2012
prepareMyPanel
вообще вызывается? не могли бы вы опубликовать код, который вы пробовали? 28.06.2012