diff --git a/app/assets/javascripts/app/controllers/_application_controller.coffee b/app/assets/javascripts/app/controllers/_application_controller.coffee index c9769a3ee..f41b81d9d 100644 --- a/app/assets/javascripts/app/controllers/_application_controller.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller.coffee @@ -52,6 +52,14 @@ class App.Controller extends Spine.Controller @controllerId ) + one: (event, callback) => + App.Event.bind( + event + callback + @controllerId + true + ) + unbind: (event, callback) => App.Event.unbind( event diff --git a/app/assets/javascripts/app/lib/app_post/task_manager.coffee b/app/assets/javascripts/app/lib/app_post/task_manager.coffee index 152ec2db8..ad91110fd 100644 --- a/app/assets/javascripts/app/lib/app_post/task_manager.coffee +++ b/app/assets/javascripts/app/lib/app_post/task_manager.coffee @@ -59,6 +59,10 @@ class App.TaskManager return if !_instance _instance.worker(key) + @ensureWorker: (key, callback) -> + return if !_instance + _instance.ensureWorker(key, callback) + @nextTaskUrl: -> return if !_instance _instance.nextTaskUrl() @@ -153,8 +157,8 @@ class _taskManagerSingleton extends App.Controller title: App.i18n.translateInline('Loading...') head: App.i18n.translateInline('Loading...') worker = App.TaskManager.worker(task.key) - if worker - data = worker.meta() + if worker && worker.meta + data = worker.meta(task) # apply meta data of controller if data @@ -180,6 +184,15 @@ class _taskManagerSingleton extends App.Controller return @workers[ key ] if @workers[ key ] return + ensureWorker: (key, callback) => + if worker = @worker(key) + callback(worker) + return + + @one "TaskManager::#{key}::WorkerStarted", => + @ensureWorker(key, callback) + true + execute: (params) -> @queue.push params @run() @@ -306,6 +319,7 @@ class _taskManagerSingleton extends App.Controller # start controller if not already started if !@workers[params.key] @workers[params.key] = new App[params.controller](params_app) + App.Event.trigger "TaskManager::#{params.key}::WorkerStarted" # if controller is started hidden, call hide of controller if !params.show