dzkcc-mflow 0.0.41 → 0.0.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -54,7 +54,6 @@ export interface UIPreloadConfig {
54
54
  delay?: number;
55
55
  }
56
56
  interface IInternalView extends IView {
57
- __group__: string | undefined;
58
57
  __isIView__: boolean;
59
58
  }
60
59
  type ICocosView = IInternalView & Component;
@@ -77,6 +76,7 @@ declare abstract class CcocosUIManager implements IUIManager {
77
76
  export declare class UIManager extends CcocosUIManager {
78
77
  private _cache;
79
78
  private _groupStacks;
79
+ private _view2group;
80
80
  private _inputBlocker;
81
81
  private _loadingView;
82
82
  private _loadingPromises;
@@ -92,6 +92,7 @@ class UIManager extends CcocosUIManager {
92
92
  super();
93
93
  this._cache = new Map();
94
94
  this._groupStacks = new Map();
95
+ this._view2group = new Map();
95
96
  this._inputBlocker = null;
96
97
  this._loadingView = null;
97
98
  this._loadingPromises = new Map();
@@ -281,12 +282,10 @@ class UIManager extends CcocosUIManager {
281
282
  if (!view) {
282
283
  return;
283
284
  }
284
- // 区分两种情况处理:
285
- // 1. 如果视图有 __group__ 属性且不为 undefined,说明是通过 openAndPush 打开的栈式UI
286
- // 2. 否则是通过 open 打开的普通 UI
287
- if (view.__group__ && view.__group__.trim() != "") {
285
+ const group = this._view2group.get(view.node);
286
+ if (group && group.trim() != "") {
288
287
  // 栈式UI:调用 _internalCloseAndPop 来处理返回逻辑
289
- this._internalCloseAndPop(view.__group__, false);
288
+ this._internalCloseAndPop(group, false);
290
289
  }
291
290
  else {
292
291
  // 普通UI:直接关闭该视图
@@ -392,6 +391,16 @@ class UIManager extends CcocosUIManager {
392
391
  for (let i = 0; i < comps.length; i++) {
393
392
  const comp = comps[i];
394
393
  if ("__isIView__" in comp && comp.__isIView__) {
394
+ /**
395
+ * 这里需要注意:
396
+ * 1、_view2group中存储的是通过getComponent获取的。
397
+ * 2、这里是通过所node.components获取的。
398
+ * 3、这俩种方式获得的引用可能是不同的(_view2group.get(comp) == undefined)
399
+ * 4、所以这里需要通过comp.constructor来获取视图类型,然后通过getComponent获取引用,确保一致。
400
+ * 5、但我选择了_view2group使用node当作key,这样更稳定。
401
+ */
402
+ // const viewType = comp.constructor as new () => ICocosView;
403
+ // return target.getComponent(viewType) as ICocosView;
395
404
  return comp;
396
405
  }
397
406
  }
@@ -500,7 +509,7 @@ class UIManager extends CcocosUIManager {
500
509
  top.node.removeFromParent();
501
510
  }
502
511
  // 标记视图所属组并入栈
503
- view.__group__ = group;
512
+ this._view2group.set(view.node, group);
504
513
  stack.push(view);
505
514
  addChild(view.node);
506
515
  this._adjustMaskLayer();
@@ -531,7 +540,9 @@ class UIManager extends CcocosUIManager {
531
540
  this._blockInput(true);
532
541
  try {
533
542
  // 移除当前栈顶视图
534
- yield this._remove(stack.pop(), destroy);
543
+ const removed = stack.pop();
544
+ this._view2group.delete(removed.node);
545
+ yield this._remove(removed, destroy);
535
546
  // 恢复上一个视图
536
547
  const top = stack[stack.length - 1];
537
548
  if (top) {
@@ -570,9 +581,8 @@ class UIManager extends CcocosUIManager {
570
581
  yield this._remove(viewInstance, destroy);
571
582
  return;
572
583
  }
573
- // 处理视图实例
584
+ // 获取视图实例
574
585
  const viewInstance = viewKeyOrInstance;
575
- viewInstance.__group__ = undefined;
576
586
  if (!skipAnimation) {
577
587
  // * 播放关闭动画,使用async是必要的,因为:
578
588
  // * 确保动画播放完成后再执行onExit和节点移除,不然还没播放动画了,UI就已经没了
@@ -619,6 +629,9 @@ class UIManager extends CcocosUIManager {
619
629
  this._remove(view, destroy, true);
620
630
  }
621
631
  }
632
+ for (const view of this._view2group.keys()) {
633
+ this._view2group.delete(view);
634
+ }
622
635
  // 调整遮罩层级
623
636
  this._adjustMaskLayer();
624
637
  }
@@ -637,6 +650,9 @@ class UIManager extends CcocosUIManager {
637
650
  }
638
651
  }
639
652
  }
653
+ for (const view of this._view2group.keys()) {
654
+ this._view2group.delete(view);
655
+ }
640
656
  // 清空所有栈
641
657
  this._groupStacks.clear();
642
658
  // 调整遮罩
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dzkcc-mflow",
3
- "version": "0.0.41",
3
+ "version": "0.0.43",
4
4
  "description": "A modular design and process management framework developed for the cocos engine, suitable for decoupling and dependency injection.",
5
5
  "author": "duanzhk",
6
6
  "license": "MIT",