* Prepare view instances of charts and components * @param {module:echarts/model/Global} ecModel * @private
(ecIns, type, ecModel, scheduler)
| 28536 | * @private |
| 28537 | */ |
| 28538 | function prepareView(ecIns, type, ecModel, scheduler) { |
| 28539 | var isComponent = type === 'component'; |
| 28540 | var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews; |
| 28541 | var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap; |
| 28542 | var zr = ecIns._zr; |
| 28543 | var api = ecIns._api; |
| 28544 | |
| 28545 | for (var i = 0; i < viewList.length; i++) { |
| 28546 | viewList[i].__alive = false; |
| 28547 | } |
| 28548 | |
| 28549 | isComponent |
| 28550 | ? ecModel.eachComponent(function (componentType, model) { |
| 28551 | componentType !== 'series' && doPrepare(model); |
| 28552 | }) |
| 28553 | : ecModel.eachSeries(doPrepare); |
| 28554 | |
| 28555 | function doPrepare(model) { |
| 28556 | // Consider: id same and type changed. |
| 28557 | var viewId = '_ec_' + model.id + '_' + model.type; |
| 28558 | var view = viewMap[viewId]; |
| 28559 | if (!view) { |
| 28560 | var classType = parseClassType(model.type); |
| 28561 | var Clazz = isComponent |
| 28562 | ? Component.getClass(classType.main, classType.sub) |
| 28563 | : Chart.getClass(classType.sub); |
| 28564 | |
| 28565 | if (__DEV__) { |
| 28566 | assert(Clazz, classType.sub + ' does not exist.'); |
| 28567 | } |
| 28568 | |
| 28569 | view = new Clazz(); |
| 28570 | view.init(ecModel, api); |
| 28571 | viewMap[viewId] = view; |
| 28572 | viewList.push(view); |
| 28573 | zr.add(view.group); |
| 28574 | } |
| 28575 | |
| 28576 | model.__viewId = view.__id = viewId; |
| 28577 | view.__alive = true; |
| 28578 | view.__model = model; |
| 28579 | view.group.__ecComponentInfo = { |
| 28580 | mainType: model.mainType, |
| 28581 | index: model.componentIndex |
| 28582 | }; |
| 28583 | !isComponent && scheduler.prepareView(view, model, ecModel, api); |
| 28584 | } |
| 28585 | |
| 28586 | for (var i = 0; i < viewList.length;) { |
| 28587 | var view = viewList[i]; |
| 28588 | if (!view.__alive) { |
| 28589 | !isComponent && view.renderTask.dispose(); |
| 28590 | zr.remove(view.group); |
| 28591 | view.dispose(ecModel, api); |
| 28592 | viewList.splice(i, 1); |
| 28593 | delete viewMap[view.__id]; |
| 28594 | view.__id = view.group.__ecComponentInfo = null; |
| 28595 | } |