Как обновить Extjs Progress Bar с результатами JSON?

Я столкнулся с некоторыми трудностями в том, чтобы заставить мой индикатор выполнения получать свой прогресс из результатов Json и обновлять индикатор выполнения на основе проверки таймера каждые 10 секунд.

Я могу создать результат json следующим образом:

{"success":true, "progress":0.2}

Я полагаю, что общая идея заключается в том, что мне нужна задача с интервалом, установленным на 10 секунд, и бегун для запуска задачи, и когда индикатор выполнения начнет работать, бегун проверит результаты из Json и обновит ход выполнения. бар по мере необходимости.

Код пока:

var task = {
    run: function(){
        // what to add here?
    },
        interval: 10000
    }
}

Сказав это, у меня возникают трудности с:

  1. Как добавить часть Json в задачу?
  2. Как обновить индикатор выполнения с заданным результатом Json?

Большое тебе спасибо.


person jl.    schedule 17.11.2009    source источник


Ответы (2)


Мне удалось запустить это и запустить, по-видимому, это недостающая головоломка для моего вопроса. Для тех, кто застрял с этим, как я.

По сути, просто добавьте эту часть, которая будет извлекать результат json из указанного вами URL-адреса, и в случае успеха обновите индикатор выполнения.

И минимальный код, который будет встроен в вашу задачу, например:

Ext.Ajax.request({
           url: 'getStatus',
           success: function(r) {
                 var i = Ext.decode(r.responseText).progress;
                 progressbar.updateProgress(count +' completed');
           }
});
person jl.    schedule 17.11.2009
comment
@jl: +1 приятно опубликовать ответ на ваш вопрос в таком случае - person RageZ; 17.11.2009

Я не знаю, в каком стеке вы работаете, но что вы можете сделать с точки зрения общего подхода.


Как добавить часть Json в задачу?

Если у вас есть доступ к memcached или чему-то подобному, вы можете использовать его для хранения хода выполнения задачи. Таким же образом вы можете использовать базу данных или даже файл, поскольку вы хотите сохранить только число.

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

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


Как обновить индикатор выполнения с заданным результатом Json?

В ExtJS есть TaskManager, который позволит вам выполнять ajax запрашивает каждые n секунд, вытаскивает прогресс и обновляет прикрепленный индикатор выполнения.

// Start a simple clock task that updates a div once per second
var task = {
    run: function(){
        Ext.fly('clock').update(new Date().format('g:i:s A'));
    },
    interval: 1000 //1 second
}
Ext.TaskMgr.start(task);
person RageZ    schedule 17.11.2009
comment
Спасибо Rage Z. Это не то, что я ищу, я уже получил эту часть. Во всяком случае, мне удалось разобраться в этом вопросе. - person jl.; 17.11.2009
comment
@jl: ха, извините, я думал, вам нужно немного HOWTO, это было больше связано с тем, как действительно обновить индикатор выполнения? - person RageZ; 17.11.2009
comment
@RageZ: Нет проблем, спасибо за ответ на мой вопрос. Да, это больше о том, как захватить и передать данные на индикатор выполнения. Это запрос Ajax, который мне не хватает. Спасибо еще раз. - person jl.; 17.11.2009
comment
@RageZ: Я думаю, вы должны сгенерировать какой-то task_id по первому запросу, а затем просто запрос ajax, передающий этот идентификатор? как это звучит ? - person RageZ; 17.11.2009
comment
@RageZ: Хм ... Я не совсем понимаю часть запроса ajax, передающего идентификатор, как мне это сделать? - person jl.; 17.11.2009