Javascript KnockoutJS双绑定小部件应用程序

Javascript KnockoutJS双绑定小部件应用程序,javascript,knockout.js,Javascript,Knockout.js,我有一个场景,我开发了一个基于小部件的应用程序,它将自己注入到消费应用程序的DOM中。该小部件使用KnockoutJS呈现自己的UI,并绑定自己的ViewModel 消费应用程序(可能不是我的)也使用KnockoutJS以完全不同的ViewModel呈现自己的UI 发生的情况是,消费页面加载并运行ko.applyBindings(hostPageViewModel)。然后小部件加载并运行ko.applyBindings(widgetDataViewModel)。一旦执行了第二个applyBind

我有一个场景,我开发了一个基于小部件的应用程序,它将自己注入到消费应用程序的DOM中。该小部件使用KnockoutJS呈现自己的UI,并绑定自己的ViewModel

消费应用程序(可能不是我的)也使用KnockoutJS以完全不同的ViewModel呈现自己的UI

发生的情况是,消费页面加载并运行ko.applyBindings(hostPageViewModel)。然后小部件加载并运行ko.applyBindings(widgetDataViewModel)。一旦执行了第二个applyBindings,消费页面就会释放其绑定模型的上下文,并且不显示任何内容。在调试中,我可以看到消费应用程序上的数据呈现,然后被小部件应用程序擦除

除了尝试维护两个完全不同的敲除实例(甚至不确定这是否可行,但我正在考虑更新widget版本并将其命名为kotwo)之外,还有解决方案吗

我不能只应用一次绑定,因为这种设计的应用程序风格中的应用程序


如果有人有建议的话,我希望能在这方面得到一些帮助。

我认为您需要将第二个应用绑定的范围仅限于包含div的小部件,该小部件仅在加载小部件后添加到DOM中,并且在调用第一个
applyBindings
后添加到DOM中

所以小部件会调用

ko.applyBindings(widgetViewModel, $widgetDiv);
这将阻止他们互相践踏

至于有两个版本的KO出现在页面上,我不确定后果是什么。您是否可以测试ko对象,如果找不到,请动态包含您的文件


希望这有帮助。

我刚找到这个[我不知道它的存在。听起来你可以定义绑定的范围,但我不确定这样做是否可行。似乎没有相关的文档。我想说的是,小部件应用程序可以从其根应用绑定,并且完全与任何消费应用程序隔离,如果这样做有效的话。好的,别介意我的问题。的rootnode功能KnockoutJS正是我所需要的。这些家伙没有什么没有想到的吗?我需要一份与KnockoutJS团队合作的工作……太棒了!你能不能把你的问题作为一个问题发布出来,让其他用户得到正确的指导。你基本上写了我说的,所以你得到了解决方案的学分:)。我正计划使用一个版本的KO。。.仅在需要时进行实例化。神奇之处在于我不知道存在的额外rootnode参数。