该页面绑定到页面视图模型,并且在页面内部加载一个绑定到它自己的视图模型的客户端视图。我试图使事情分开,以便页面视图模型仅知道客户端视图的名称,并且不直接与客户端视图模型通信。因此页面视图如下所示:
<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。
发布/订阅似乎是最好的方法,因为您已经指出了视图模型应该分开。您可以考虑创建一个在客户端/页面之间共享的小模块,而不是使用应用程序进行通信
define(['durandal/events'],function(Events) {
var myObj = { ... };
Events.includeIn(myObj);
return myObj;
});
如果以后决定要进行更紧密的耦合,则还可以向myObj添加一些共享的可观察对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句