页面绑定到页面视图模型和内部页面我加载一个客户端视图,绑定到它自己的视图模型。我尝试将事物分开,因此页面视图模型只知道客户端视图的名称,并且不直接与客户端视图模型通信。因此页面视图如下所示:
<div>
<div data-bind="compose:client"></div> <!-- client is an observable of type string -->
</div>
<!-- some more bindings -->
但我需要根据客户端视图模型的状态更新页面视图模型的某些属性,因为这些属性绑定到页面视图(而不是客户端视图)。最好的方法是什么?我应该在客户端视图模型中使用app.triger
并在页面视图模型中监听吗?最好只绑定到客户端视图模型(页面视图模型的client
属性将是对象或函数而不是字符串)并通过公共接口直接从页面视图模型与当前客户端视图模型进行通信以获取状态客户端视图模型并计算页面视图模型的一些属性?那里有什么最佳做法?
此外,我会尽量避免使用preserveContext:true
,因为这似乎是最不干净的选项。
如果这很重要,我没有使用路由,因为路由在该页面上没用。我正在从页面视图模型中手动更改client
属性。
我在使用Durandal 2.0。
答案 0 :(得分:1)
Pub / sub似乎是最佳方式,因为您已指出视图模型应该分开。您可以考虑创建一个在clients / page
之间共享的小模块,而不是使用app进行通信define(['durandal/events'],function(Events) {
var myObj = { ... };
Events.includeIn(myObj);
return myObj;
});
如果您以后决定要进行更紧密的耦合,则可以向myObj添加一些共享的observable。