0

我有一个问题,我在一个组件中发布一个可观察的淘汰赛,并且有另一个具有订阅此邮箱事件的视图模型的组件。

发布事件在我的“数据表”组件视图模型中,如下所示:

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 订阅在“数据表”组件视图模型中发布,但寻呼机不承认该事件已发布。

我发现这是因为“pager”组件需要在“data-table”组件之前变为活动状态,否则“pager”视图模型订阅仅在该代码行已被检查时检查任何传入的发布运行.. 很多时候,这是在数据表发布事件之后。

我的问题是,如何确保寻呼机组件在数据表组件之前激活,以便 pub-sub 事件系统在这种情况下按预期工作?

4

1 回答 1

1

你需要一个握手协议。每个组件将started在启动时在邮箱上发布一条消息。每个人还将订阅started来自另一个人的消息,并在收到消息后,将started再次发出并取消订阅。

无论哪个先开始,都会发布一条从未收到的消息。第 2 个开始将发布,第 1 个将接收,重新发送和取消订阅,第 2 个将重新发送一条从未收到的消息。每个人都知道另一个人还活着,并且可以执行任何相关的任务。

于 2017-07-28T14:48:16.397 回答