Как вызвать функцию (не AJAX) после завершения другой функции (не AJAX) в Dojo? - PullRequest
3 голосов
/ 16 сентября 2010

Это не вопрос обратного вызова запроса / ответа AJAX ...

Я строю сетку, используя Dojo 1.5. Я пытаюсь dojo.connect кнопки расширения / сжатия с функцией. Моя проблема в том, что метод grid.startup (), кажется, занимает некоторое время после вызова перед созданием реальных узлов DOM, поэтому, когда я вызываю dojo.query, ни один из узлов DOM, к которым я хочу подключить события и обработчики, отсутствует.

У меня есть сетка, созданная внутри метода init (), который вызывается dojo.addOnLoad (). У меня есть метод connectExpandos (), подключенный к init () через dojo.connect ("init", connectExpandos); Это выполняется нормально, но мне нужно установить setTimeout () в цикле while, чтобы дождаться окончания grid.startup () ...

Кто-нибудь знает о лучшем способе сделать это? Возможно обратный вызов grid.startup (), который я могу подключить? Спасибо за любые идеи. -robbie

Ответы [ 4 ]

3 голосов
/ 27 сентября 2010

Еще одно предложение ... похоже, что это функция запуска, которая реализована в суперклассе DataGrid, _Grid (http://svn.dojotoolkit.org/src/dojox/trunk/grid/Grid.js), вызывает функцию render, которая, как я полагаю, и есть то, что фактически выполняет рендеринг содержимого Grid. Впоследствии , похоже, что render вызывает метод "postrender" после того, как он завершил рендеринг. Возможно, вы могли бы подключить ваш метод к методу "postrender" вместо "startup".

dojo.connect(grid, "postrender", function(){connectExpandos()})
1 голос
/ 29 сентября 2011

Я думаю, что вы искали обратный вызов _onFetchComplete

dojo.connect(grid,'_onFetchComplete',function(event){
    alert("hello data is loaded")
});
0 голосов
/ 21 сентября 2010

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

<script type="text/javascript">
   var grid = new dojox.grid.EnhancedGrid({plugins : {nestedSorting: true, dnd: true, indirectSelection: true, 
   menus:{headerMenu:"headerMenuId", rowMenu:"rowMenuId",  cellMenu:"cellMenuId",selectedRegionMenu:"selectedRegionMenuId"}},
   ... }, dojo.byId('gridDiv'));
   grid.startup();
   connectExpandos();
</script>
0 голосов
/ 17 сентября 2010

Я думаю, вы можете просто подключить событие к методу запуска сетки

dojo.connect(grid, "startup", function(){connectExpandos()})
...