Durandal和多个视图使用相同的vm

时间:2013-12-03 17:19:22

标签: view model durandal

我有一个ADD和一个客户实体的EDIT页面。支持每个功能的数据是相似的,但是有两个不同的用户界面之间有不同的业务规则,所以我最初的想法是我制作了2个单独的视图,但使用单个虚拟机。这是一个与John Papa的例子不同的方法,我将其用作我的向导,因为他每个人都有一个单独的vm。 (sessionadd.js,sessiondetail.js)。数据是相同的,所以它似乎有很多重复,但也许这就是要走的路。

两个问题:在这种情况下,添加/编辑的数据是相同的,但规则是不同的最佳做法是什么?我已经可以看到自己做“if(mode =='add'){// stuff} else {//它的编辑}。这让我感到困扰,但我也不喜欢不得不改变2的想法如果我向视图添加新字段,则为vms。

第二个问题,我可以将视图指定为路径定义的一部分吗?我没有在文档中看到任何内容,但我仍然是框架的新手。在以下路由中,我希望第一个用custedit.html加载,在第二个用custadd.html加载。两者都使用custmaint.js vm(从不在同一时间)。

{ route: 'custedit', moduleId: 'viewmodels/custmaint', title: 'Edit' },
{ route: 'custadd',  moduleId: 'viewmodels/custmaint', title: 'Add'  },

感谢

1 个答案:

答案 0 :(得分:1)

您可以通过在viewmodel上定义getView()或viewUrl()来自定义要使用的视图,如下所述:

http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks.html

关于您的初始问题,如果它们非常相似,我肯定会在单个视图模型单一视图中组合编辑和添加操作。共享相同的视图模型但拆分视图可能会导致大量重复的视图代码。如果需要简化,可以随时将视图的元素分解为较小的视图。

如果编辑和添加体验不同以保证单独的视图,我也会创建一个单独的视图模型(并且可能会将视图部分和视图模型功能拆分为更小的组件)

相关问题