我有一个问题,我在组件中的knockout observable上发布,并且有另一个组件具有订阅此邮箱事件的视图模型。
发布活动位于我的“数据表”中。组件视图模型如下:
this.pagerParams = ko.observable({ currentPage: this.currentPage, totalItems: this.recordsTotal, itemsPerPage: this.length }).publishOn("pagerParams");
然后我有一个寻呼机'订阅此邮箱的组件发布。
ko.postbox.subscribe("pagerParams", (params: PagerParams) => {
this.assignParamValues(params, false);
this.numberOfPages(Math.ceil(this.totalItems() / this.itemsPerPage()) || 1);
this.pageNumbers(this.getPageNumbers());
});
上述邮箱订阅已在视图模型构造函数中注册。根据哪个组件首先变为活动状态,我有时会遇到一个问题,其中pagerParams订阅发布在'数据表'组件视图模型,但寻呼机不承认该事件已被发布。
我发现原因是因为寻呼机'组件需要在“数据表”之前变为活动状态。组件,否则'寻呼机'视图模型订阅仅在运行该行代码时检查任何传入的发布...并且很多时候,这是在数据表发布事件之后。
我的问题是,如何确保分页器组件在数据表组件之前变为活动状态,以便pub-sub事件系统在此方案中按预期工作?
答案 0 :(得分:1)
您需要握手协议。每个组件将在启动时在邮箱上发布started
消息。每个人都会订阅来自其他人的started
消息,并在收到消息后再次发出started
并取消订阅。
无论哪个先开始,都会发布一条从未收到的消息。第二个开始发布,第一个将接收,重新发送和取消订阅,第二个将重新发送一个从未收到的消息。每个人都知道对方还活着,然后可以做任何依赖的任务。