Привет.
Использую TreeView control с установленным PopulateOnDemand. Когда открывают узел, подчитываю "детей" из базы и затем отрисовываю.
Проблема в том, что подчитка из базы занимает какое-то время, и получается, что человек нажал на плюсик, и ждет секунд 3-5. Но в это время никакого отклика не видет, и думает, что не ткнул на плюсик.
Как нарисовать что-нибудь на экране, пока данные подчитываются из базы ?
типа как на рсдне появляется "Загрузка, подождите пожалуйста..."
Здравствуйте, <Аноним>, Вы писали:
А>типа как на рсдне появляется "Загрузка, подождите пожалуйста..."
посмотрел я на это дерево первый раз... мда... клиентский API там хиловат
решение в лоб...в конец страницы
пишем
<script>
var base$TreeView_PopulateNodeDoCallBack = this.TreeView_PopulateNodeDoCallBack;
var base$TreeView_ProcessNodeData = this.TreeView_ProcessNodeData;
this.TreeView_ProcessNodeData = function ( result, context )
{
alert( "after load " );
return base$TreeView_ProcessNodeData ( result, context );
}
this.TreeView_PopulateNodeDoCallBack = function (context,param)
{
alert( "before load " );
return base$TreeView_PopulateNodeDoCallBack(context,param)
}
</script>
ну или через RegisterStartupScript
вместо алертов пишем код отображающий какой нибудь индикатор загрузки.
как я уже сказал клиентское API ущербное, ноду там добавить/удалить низя, поэтому в чистом виде как на рсдн не получится.
вот пример простенькой реализации.
<script>
var base$TreeView_PopulateNodeDoCallBack = this.TreeView_PopulateNodeDoCallBack;
var base$TreeView_ProcessNodeData = this.TreeView_ProcessNodeData;
this.TreeView_ProcessNodeData = function ( result, context )
{
//alert( "after load " );
hide_wait_for_node( context.node );
return base$TreeView_ProcessNodeData ( result, context );
}
this.TreeView_PopulateNodeDoCallBack = function (context,param)
{
//alert( "before load " );
show_wait_for_node( context.node );
return base$TreeView_PopulateNodeDoCallBack(context,param)
}
function hide_wait_for_node( node )
{
if ( node.wait_img )
{
node.removeChild( node.wait_img );
}
}
function show_wait_for_node( node )
{
var wait_img = document.createElement("IMG" );
wait_img.src = "loading.gif";
wait_img.border = 0;
node.wait_img = wait_img;
node.appendChild( wait_img );
}
</script>
мой хостинг временно не работает
подниму — выложу демо.
а пока скриншот:

... << RSDN@Home 1.2.0 alpha rev. 662>>
А>>>типа как на рсдне появляется "Загрузка, подождите пожалуйста..."
А>Супер. Спасибо большое.
А>А можно ли "подпихнуть" картинку или надпись под родителя ?
А>Простите за шквал вопросов, но в HTML я лох...
можно, если будет не лень, на выходных сделаю
общая идея — найти нужную ноду от переданного node и добавить туда временного ребенка.
найти ее поможет FF Firebug или IE DOM Inpector
M>можно, если будет не лень, на выходных сделаю
стало не лень...

вот результат:
http://rsdnsamples.poigraem.ru/TreeViewOnDemand/Default.aspx
Forced delay — задержка для эмуляции долгого запроса( мсек )
M>стало не лень...
вот результат:
P.S. только еще наверное стоит менять + на — во время ожидания или на промежуточную иконку, но это уж сами
Здравствуйте, mogadanez, Вы писали:
M>>можно, если будет не лень, на выходных сделаю
M>стало не лень...
вот результат:
M>стало не лень...
вот результат:
есть конечно баги, например если нажать несколько плюсиков сразу — грузится только последний.
но это я думаю вы и сами поправите.
... << RSDN@Home 1.2.0 alpha rev. 676>>