我已经开始使用(几个小时前)Durandal希望在一个页面内管理视图和允许组合 - 之前的方法,也使用Knockout,在一个胖的HTML文件中维护过于笨重.
我已经安装/设置了Durandal,我可以创建视图和视图模型 - 但是,我不知道如何将数据导入 viewmodel以用作新视图模型的基础.
举例来说,我有选择的项目是"左侧导航栏" -当一个项目被选中它更新了"选择项"在当前的模型观察到的,但它应该也加载正确的"详细信息视图",在右边:由于部分尝试Durandal分离组件/视图的原因,这应该来自一个单独的视图/视图模型.
我已经阅读了包含Composition和Using Composition的文档,但是关于如何将数据传递给viewmodel的方法对我来说并不清楚.看起来我可以使用现有模型的视图(在当前视图/范围中),但我真的只想使用一些当前模型数据(即id)来获取"真实"模型数据风景.
因此,我的问题;
如何将初始数据(例如"选定项目")传递给视图模型?我更喜欢使用声明性的"compose:"绑定,因为这就是KO的原因.KO.
这种概念是在这里使用/传递初始数据的正确方法,还是有更好的选择?我看到"activeItem"含糊地提到了,但细节/用法让我很开心.
更新1:我发现我们如何在视图之间共享数据/传递数据视图以进行查看,但实际实现中缺少响应.我真的不想在父子(不同的视图/视图模型对)之间共享viewmodel,我想使用声明式方法(没有事件).父母不需要了解孩子,但孩子需要从父母那里获得数据.
更新2:虽然上面我暗示只需要"id",但我想要一种适用于任何基础对象的方法,路由器不一定适合.在这种情况下,深度链接不是问题.但是,如果你觉得路由器的方式来处理这个,张贴如答案参数(带细节),我会至少给它一个赞成票..
parent-child mvvm viewmodel single-page-application durandal
我想在我的durandal应用程序的每个"区域"有不同的导航.通过在布局页面中定义导航部分并使用嵌套布局页面为每个区域实现导航,我使用ASP.NET MVC实现了这一点.durandal中的视图结构如下:
http://i1346.photobucket.com/albums/p697/user2269352/viewstructure_zps5e21e724.gif
我正在使用ASP.NET MVC4 durandal模板,我猜我可能需要从shell.html更改以下segement
<ul class="nav" data-bind="foreach: router.visibleRoutes">
<li data-bind="css: { active: isActive }">
<a data-bind="attr: { href: hash }, html: name"></a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我想理想情况下我希望有单独的html页面可以加载到此部分,具体取决于我正在查看的区域/页面.