在shell.html
for HotTowel模板中,我们有:
<!--ko compose: {model: router.activeItem,
afterCompose: router.afterCompose,
transition: 'entrance'} -->
<!--/ko-->
将按惯例自动插入正确的视图。我试图根据用户在HotTowel / Durandal应用程序中的角色注入不同的视图。例如, 我有两个观点,
并且只有一个ViewModel:
现在,我希望在productEditor.js
中有一个函数,让我根据用户的角色决定插入哪个视图。我在Composition documentation中看到,我们可以function strategy(settings) : promise
,但我不确定在HotTowel模板中完成此操作的最佳方法是什么。有人已经试过并得到了答案吗?
答案 0 :(得分:3)
可以返回一个&#39; viewUrl&#39;在视图模型中的属性,所以希望像下面这样的东西会打开门; - )。
define(function () {
viewUrl = function () {
var role = 'role2'; //Hardcoded for demo
var roleViewMap = {
'default': 'samples/viewComposition/dFiddle/index.html',
role1: 'samples/viewComposition/dFiddle/role1.html',
role2: 'samples/viewComposition/dFiddle/role2.html'
};
return roleViewMap[role];
}
return {
viewUrl: viewUrl(),
propertyOne: 'This is a databound property from the root context.',
propertyTwo: 'This property demonstrates that binding contexts flow through composed views.'
};
});
答案 1 :(得分:0)
您是否看过John Papa关于PluralSight的JumpStart课程。
在此处查看该应用的源代码:https://github.com/johnpapa/PluralsightSpaJumpStartFinal
在App / Config.js文件中,他添加了默认情况下可见的其他路由:
var routes = [{
url: 'sessions',
moduleId: 'viewmodels/sessions',
name: 'Sessions',
visible: true,
caption: 'Sessions',
settings: { caption: '<i class="icon-book"></i> Sessions' }
}, {
url: 'speakers',
moduleId: 'viewmodels/speakers',
name: 'Speakers',
caption: 'Speakers',
visible: true,
settings: { caption: '<i class="icon-user"></i> Speakers' }
}, {
url: 'sessiondetail/:id',
moduleId: 'viewmodels/sessiondetail',
name: 'Edit Session',
caption: 'Edit Session',
visible: false
}, {
url: 'sessionadd',
moduleId: 'viewmodels/sessionadd',
name: 'Add Session',
visible: false,
caption: 'Add Session',
settings: { admin: true, caption: '<i class="icon-plus"></i> Add Session' }
}];
您可以使用相同的逻辑向这两个视图添加路径,然后在productEditor.js中,您可以决定使用router.navigateTo()方法导航和导航到哪个视图。