jQuery делает что-то, когда собственная функция готова - PullRequest
0 голосов
/ 18 мая 2011

Я бы хотел расставить приоритеты для своих функций.

$(document).ready(function(){
drawMap();
on showLinks() ready do drawChart();
});

Как мне это сделать с помощью jQuery?

Спасибо, Репас

Ответы [ 4 ]

1 голос
/ 18 мая 2011
  • Если showLinks() & drawMaps() не асинхронный, просто позвоните drawChart() сразу после:

    $(document).ready(function(){
       drawMap();
       showLinks();
       drawChart();
    });
    
  • В противном случае укажите обратный вызов для showLinks():

    function showLinks(callback)
    {
        /* your code */
        callback();
    }
    
    $(document).ready(function(){
       drawMap();
       showLinks(drawChart);
    });
    

Трудно сказать, что является и не является синхронным и асинхронным в вашем коде, но в любом случае предоставление обратных вызовов, как в примере выше, - это путь вперед.

1 голос
/ 18 мая 2011

Как уже упоминал Гэри в своем ответе, вы захотите сделать это, только если вы имеете дело с асинхронным выполнением.

Возможно, вы захотите взглянуть на deferreds , который был представлен в jQuery 1.5.

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

$(function(){
    drawMap();
    $.when(showLinks())
        .then(drawChart);
});

Чтобы все вышеперечисленное сработало, вы должны убедиться, что функция showLinks возвращает обещание и что она запускает resolve после завершения выполнения.

function showLinks(){
    var dfd = $.Deferred();

    // Add your asynchronous code here
    setTimeout(function(){
        console.log("Links shown!");
        dfd.resolve(); 
    }, 1000);

    return dfd.promise();
}

Проверка контрольный пример на jsFiddle

1 голос
/ 18 мая 2011

вызов showLinks () внутри drawMap () вызовите drawChart () внутри и в конце showLinks ()

0 голосов
/ 18 мая 2011

Можете ли вы сгенерировать пользовательское событие из функции showLinks ()? Тогда вы можете поймать это событие и реагировать соответственно

Это хорошая игра между bind и trigger. Вот документы

...