diff --git a/src/model/Global.js b/src/model/Global.js index da4da9995848082a648314db7af25e573e763ce5..96440b721f5ac62ac184cc38ce8da4ace79747e2 100644 --- a/src/model/Global.js +++ b/src/model/Global.js @@ -58,8 +58,6 @@ var GlobalModel = Model.extend({ * @type {module:echarts/model/OptionManager} */ this._optionManager = optionManager; - - // this.settingTask = createTask(); }, setOption: function (option, optionPreprocessorFuncs) { diff --git a/src/model/Series.js b/src/model/Series.js index 4875cb19714c543c47892463a45361f08e56d3e1..d00a367ac221af7b7946621fcb03f37e63cdb703 100644 --- a/src/model/Series.js +++ b/src/model/Series.js @@ -69,12 +69,11 @@ var SeriesModel = ComponentModel.extend({ */ this.seriesIndex = this.componentIndex; - // this.settingTask = createTask(); - this.dataTask = createTask({ count: dataTaskCount, reset: dataTaskReset - }, {model: this}); + }); + this.dataTask.context = {model: this}; this.mergeDefaultAndTheme(option, ecModel); diff --git a/src/stream/Scheduler.js b/src/stream/Scheduler.js index f20dff4bc23e633e61e498a42fe281fac95a7924..33c5882e3ce4a01c961838eb9443040396e62401 100644 --- a/src/stream/Scheduler.js +++ b/src/stream/Scheduler.js @@ -249,22 +249,20 @@ function createSeriesStageTask(scheduler, stageHandler, stageHandlerRecord, ecMo // Init tasks for each seriesModel only once. // Reuse original task instance. - var task = seriesTaskMap.get(pipelineId); - if (!task) { - task = createTask({ + var task = seriesTaskMap.get(pipelineId) + || seriesTaskMap.set(pipelineId, createTask({ reset: seriesTaskReset, count: seriesTaskCount - }, { - model: seriesModel, - ecModel: ecModel, - api: api, - useClearVisual: stageHandler.isVisual && !stageHandler.isLayout, - plan: stageHandler.plan, - reset: stageHandler.reset, - scheduler: scheduler - }); - seriesTaskMap.set(pipelineId, task); - } + })); + task.context = { + model: seriesModel, + ecModel: ecModel, + api: api, + useClearVisual: stageHandler.isVisual && !stageHandler.isLayout, + plan: stageHandler.plan, + reset: stageHandler.reset, + scheduler: scheduler + }; pipe(scheduler, seriesModel, task); } @@ -280,18 +278,15 @@ function createSeriesStageTask(scheduler, stageHandler, stageHandlerRecord, ecMo function createOverallStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) { var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask - || createTask( - // For overall task, the function only be called on reset stage. - { - reset: overallTaskReset - }, - { - ecModel: ecModel, - api: api, - overallReset: stageHandler.overallReset, - scheduler: scheduler - } - ); + // For overall task, the function only be called on reset stage. + || createTask({reset: overallTaskReset}); + + overallTask.context = { + ecModel: ecModel, + api: api, + overallReset: stageHandler.overallReset, + scheduler: scheduler + }; // Reuse orignal stubs. var agentStubMap = overallTask.agentStubMap = overallTask.agentStubMap || createHashMap(); @@ -321,9 +316,9 @@ function createOverallStageTask(scheduler, stageHandler, stageHandlerRecord, ecM function createStub(seriesModel) { var pipelineId = seriesModel.uid; var stub = agentStubMap.get(pipelineId) || agentStubMap.set(pipelineId, createTask( - {plan: prepareData, reset: stubReset, onDirty: stubOnDirty}, - {model: seriesModel, overallProgress: overallProgress} + {plan: prepareData, reset: stubReset, onDirty: stubOnDirty} )); + stub.context = {model: seriesModel, overallProgress: overallProgress}; stub.agent = overallTask; stub.__block = overallProgress; diff --git a/src/stream/task.js b/src/stream/task.js index c8a1a229f2dca78da8b63e7b867362e45a8fc3a4..a5e02f2c779f5b2a1d19eba00270d524cde6f672 100644 --- a/src/stream/task.js +++ b/src/stream/task.js @@ -5,8 +5,8 @@ import { __DEV__ } from '../config'; * @param {Object} define * @return See the return of `createTask`. */ -export function createTask(define, context) { - return new Task(define, context); +export function createTask(define) { + return new Task(define); } /** @@ -16,9 +16,8 @@ export function createTask(define, context) { * @param {Function} [define.plan] Returns 'reset' indicate reset immediately. * @param {Function} [define.count] count is used to determin data task. * @param {Function} [define.onDirty] count is used to determin data task. - * @param {Object} [context] */ -function Task(define, context) { +function Task(define) { define = define || {}; this._reset = define.reset; @@ -28,7 +27,9 @@ function Task(define, context) { this._dirty = true; - this.context = context || {}; + // Context must be specified implicitly, to + // avoid miss update context when model changed. + this.context; } var taskProto = Task.prototype; @@ -125,8 +126,7 @@ function reset(taskIns, skip) { taskIns._dueIndex = taskIns._outputDueEnd = taskIns._dueEnd = 0; taskIns._progress = !skip && taskIns._reset && taskIns._reset( - taskIns.context, - taskIns._upstream && taskIns._upstream.context + taskIns.context ); var downstream = taskIns._downstream; diff --git a/src/view/Chart.js b/src/view/Chart.js index 45badbddbcd7f57d670bd89bec8f031a9708081f..2637b711a2ab8628de7d7557e2bea6818053305a 100644 --- a/src/view/Chart.js +++ b/src/view/Chart.js @@ -26,7 +26,8 @@ function Chart() { this.renderTask = createTask({ plan: renderTaskPlan, reset: renderTaskReset - }, {view: this}); + }); + this.renderTask.context = {view: this}; } Chart.prototype = {