Knockout Postbox在组件之间进行通信 - 如何确保用户处于活动状态

时间:2017-07-28 14:07:26

标签: javascript typescript knockout.js knockout-postbox

我有一个问题,我在组件中的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事件系统在此方案中按预期工作?

1 个答案:

答案 0 :(得分:1)

您需要握手协议。每个组件将在启动时在邮箱上发布started消息。每个人都会订阅来自其他人的started消息,并在收到消息后再次发出started并取消订阅。

无论哪个先开始,都会发布一条从未收到的消息。第二个开始发布,第一个将接收,重新发送和取消订阅,第二个将重新发送一个从未收到的消息。每个人都知道对方还活着,然后可以做任何依赖的任务。