在shell.html
for HotTowel模板中,我们有:
<!--ko compose: {model: router.activeItem,
afterCompose: router.afterCompose,
transition: 'entrance'} -->
<!--/ko-->
,它将按照约定自动插入正确的视图。我试图根据用户在HotTowel/Durandal应用程序中的角色注入不同的视图。例如,我有两个视图,
- productEditor_Admin.html
- productEditor_Superviser.html(而不是这两个视图,我曾经只有productEditor.html,按惯例一切工作)
和只有一个ViewModel:
- productEditor.js
现在,我想在productEditor.js
中有一个函数,它将让我根据用户的角色决定插入哪个视图。我在合成文档中看到,我们可以做function strategy(settings) : promise
,但我不确定在HotTowel模板中完成这一点的最佳方法是什么。有人试过并得到答案了吗?
在视图模型中返回'viewUrl'属性是可能的,所以希望像下面这样的东西会打开门;-)。
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.'
};
});
你看了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' }
}];
你可以使用相同的逻辑为这两个视图添加路由,然后在你的producteitor .js中,你可以使用router.navigateTo()方法来决定导航到哪个视图。