Knockout.js 使用Knockout amd helper插件和发布子发布的Knockout发生在订阅模块加载之前

Knockout.js 使用Knockout amd helper插件和发布子发布的Knockout发生在订阅模块加载之前,knockout.js,knockout-amd-helpers,Knockout.js,Knockout Amd Helpers,首先,我是knockoutjs新手,我已经开始使用knockout amd helpers开发应用程序,我们正在使用require.js加载模块。 我在发布订阅方面面临以下问题: 我的主页有两个部分,navigation和mainContainer,都作为模块外部html模板和js文件加载,我正在使用observable设置模块的名称,以便可以动态替换。在mainContainer中,有一个树,如果用户单击该树的任何节点,则会发生两件事。 1.整个mainContainer模块需要替换为同一di

首先,我是knockoutjs新手,我已经开始使用knockout amd helpers开发应用程序,我们正在使用require.js加载模块。 我在发布订阅方面面临以下问题:

我的主页有两个部分,navigation和mainContainer,都作为模块外部html模板和js文件加载,我正在使用observable设置模块的名称,以便可以动态替换。在mainContainer中,有一个树,如果用户单击该树的任何节点,则会发生两件事。 1.整个mainContainer模块需要替换为同一div标记中名为“detail”的不同模块。 2.基于树中的节点,即用户在mainContainer中单击的节点,我需要将该值作为参数传递给这个“detail”模块

我想我能达到1。通过将模块名称设置为可观察和2。通过在mainContainer中发布特定主题和详细信息模块中的节点值,我需要订阅该主题并传递给具有“data”属性的模块

因此,在树节点的onclick事件中,我发布了节点值,并更改了observable中的modulename值,从而成功地将maincainer替换为detail模块。然而,在细节模块中,即使我订阅了发布的主题,它也无法获取该值,因为该订阅发生在细节模块中,并且一旦用户单击了节点,细节模块就会加载,因此,在主容器中已经发布之后。因此,我订阅了一个主题,该主题已经发布,因此无法获得已发布的值

通过调用detail模块的根模块父级上的subscribe,我有一个临时解决方案,但在我看来这是一个肮脏的解决方案,理想情况下,我希望将此逻辑保留在detail模块本身中

这更多的是一个设计问题,所以我没有发布代码,但我想知道是否有人可以评论我是否应该以不同的方式处理这个问题,或者是否有一个技术解决方案


谢谢

< P>你可以考虑把额外的信息作为初始化数据传递给你的细节模块。 如果模块返回函数构造函数,则该值将传递给函数本身。如果模块返回一个对象,那么它将被传递给initialize函数

因此,您可以绑定持有模块绑定配置对象的可观察模块,而不是仅绑定可观察模块名称

您可以像这样填充它:

this.currentModule({
     name: "details",
     data: someData
});
具有如下绑定:

<div data-bind="module: currentModule"></div>

以下是一个示例:

不是对您问题的回答,但如果您正在与AMD、PubSub等合作开发高级应用程序,您可能希望了解Durandal: