迪朗达尔多母版页(Durandal Multiple Master Pages)

2019-09-02 04:28发布

我的工作,我想用多个主视图的SPA。 这里是我的使用情况:

我有具有配置页面的用户。 内的个人资料页,我想能够显示几个不同的看法,即 详细信息,作品,联系信息等,我需要能够深层链接到这些视图。 每个视图必须显示从主布局视图的基本用户数据。

这是我的理解是,我应该使用撰写了这一点,我有一些代码,似乎工作,但是,我希望能够从“第二壳”到实际的子画面传递数据。 看来,图示数据不沿到子视图模型的激活方法传递。

在我的“主人”视图模型我已经创建了一个名为观察到该活动视图包含对应于子视图模型(的ViewModels /用户/细节)的字符串。 然后,我有一个淘汰赛声明如下:

<!-- ko compose: {
    model: activeView(),        
    activate: true
} --><!-- /ko -->

我怎样才能将数据传递给副视点? 还是有更好的方式来做到这一点?

提前致谢!

Answer 1:

据我,ko.compose也不是那么充满活力,看起来像剃刀的布局工作。 随着迪朗达尔这是更好地使不同的意见,你可以 ,然后将它们链接到路由器。 我与约翰爸爸的热毛巾模板工作; 我建议关注与传递路由迪朗达尔和基因敲除的数据(而不是ID更多)。

当初始化您的应用程序(shell.js,main.js,...)地图设置你的路由某处(shell.js或main.js)进行最终筛选。 对于将传输数据路径,建立了他们与(:id)的建议

router.mapRoute('view/:id', moduleId, 'Customer Details', false);

在哪里,当一些路线需要 ,您可以看看约瑟夫·加布里埃尔的解决方案( https://stackoverflow.com/a/16036439/2198331 )当你需要他们来过滤你的路由使用的场合和。 在筛选出的路线,你可以入侵routeInfo运输您的参数(字符串或对象,如将selectedItem)。

arearoutes = ko.utils.arrayFilter(router.visibleRoutes(), function (route) {
              // mgpe has been set at app init
                return route.settings.mgpe === 112; 
             });

从过滤器与数据结果延长你routeInfo需要运输

areaRoutes.forEach(function(ar){
     ar.myItem = mydata; // or vm.selectedItem(); DEPARTURE LUGGAGE
}, areaRoutes);

你(myItem)现在连接到这些航线的所以你喜欢这个或这些航线(S)将携带您的数据与他们永远不会失去它,除非你更新路由器的同一对象(myItem)

function activate(adata){
       vm.arrivalData(adata.routeInfo.myItem);  // ARRIVAL LUGGAGE are here
}

路线可以携带有用的像嵌套菜单嵌套上下文嵌套路线 ; 您可以通过准备出行时,父路由是活动的,孩子们玩的路线:

router.activeItem.settings.areSameItem = function (currentItem, newItem, activationData) {
   mybag = activationData.routeInfo; // TRAVEL (current) LUGGAGE are present here
}

注意:使用前此变通,你必须考虑到安全问题,因为我是新来迪朗达尔我不知道这会不会在路由器的路由生命周期带来严重的后果。 另外要注意与对象的名称作为它的路由器的路由生活中永久停留。



Answer 2:

如何创建用户对象,并要求其在每个你的ViewModels吗? 最简单的事情是将其连接到应用程序的任何在所述用户对象的可观察的制作将更新到您的每一个SPA中的意见和的ViewModels(即app.user =)的变化。

这样,你要利用基因敲除库的子/酒馆的能力



文章来源: Durandal Multiple Master Pages