| 28367 | }; |
| 28368 | |
| 28369 | function doDispatchAction(payload, silent) { |
| 28370 | var payloadType = payload.type; |
| 28371 | var escapeConnect = payload.escapeConnect; |
| 28372 | var actionWrap = actions[payloadType]; |
| 28373 | var actionInfo = actionWrap.actionInfo; |
| 28374 | |
| 28375 | var cptType = (actionInfo.update || 'update').split(':'); |
| 28376 | var updateMethod = cptType.pop(); |
| 28377 | cptType = cptType[0] != null && parseClassType(cptType[0]); |
| 28378 | |
| 28379 | this[IN_MAIN_PROCESS] = true; |
| 28380 | |
| 28381 | var payloads = [payload]; |
| 28382 | var batched = false; |
| 28383 | // Batch action |
| 28384 | if (payload.batch) { |
| 28385 | batched = true; |
| 28386 | payloads = map(payload.batch, function (item) { |
| 28387 | item = defaults(extend({}, item), payload); |
| 28388 | item.batch = null; |
| 28389 | return item; |
| 28390 | }); |
| 28391 | } |
| 28392 | |
| 28393 | var eventObjBatch = []; |
| 28394 | var eventObj; |
| 28395 | var isHighDown = payloadType === 'highlight' || payloadType === 'downplay'; |
| 28396 | |
| 28397 | each(payloads, function (batchItem) { |
| 28398 | // Action can specify the event by return it. |
| 28399 | eventObj = actionWrap.action(batchItem, this._model, this._api); |
| 28400 | // Emit event outside |
| 28401 | eventObj = eventObj || extend({}, batchItem); |
| 28402 | // Convert type to eventType |
| 28403 | eventObj.type = actionInfo.event || eventObj.type; |
| 28404 | eventObjBatch.push(eventObj); |
| 28405 | |
| 28406 | // light update does not perform data process, layout and visual. |
| 28407 | if (isHighDown) { |
| 28408 | // method, payload, mainType, subType |
| 28409 | updateDirectly(this, updateMethod, batchItem, 'series'); |
| 28410 | } |
| 28411 | else if (cptType) { |
| 28412 | updateDirectly(this, updateMethod, batchItem, cptType.main, cptType.sub); |
| 28413 | } |
| 28414 | }, this); |
| 28415 | |
| 28416 | if (updateMethod !== 'none' && !isHighDown && !cptType) { |
| 28417 | // Still dirty |
| 28418 | if (this[OPTION_UPDATED]) { |
| 28419 | // FIXME Pass payload ? |
| 28420 | prepare(this); |
| 28421 | updateMethods.update.call(this, payload); |
| 28422 | this[OPTION_UPDATED] = false; |
| 28423 | } |
| 28424 | else { |
| 28425 | updateMethods[updateMethod].call(this, payload); |
| 28426 | } |