【发布时间】:2014-12-10 08:20:59
【问题描述】:
在 Durandal 2.x 应用程序中,我有一个视图,每次用户导航到它时都需要获取新数据。此视图通过子路由器提供服务:
define(['plugins/router'], function(router) {
var vm = {};
vm.router = router.createChildRouter()
.makeRelative({
moduleId: 'viewmodels/cms',
fromParent: true
}).map([
{ route: ['inventory', ''], moduleId: 'inventory/overview', title: 'Inventory Management', nav: true }
]).buildNavigationModel();
return vm;
});
我已将数据获取逻辑放在overview.js 中的activate 方法上
define(function(){
var vm = {};
vm.activate = function(){
// fetch data here
};
return vm;
});
但是,activate 仅在我第一次导航到该视图时被调用,而对于主路由器上的视图,activate 每次都被调用。
我尝试在子路由器上设置cacheViews: false,但这并没有改变任何东西。
我还意识到,我的视图模型上的 binding 方法每次都会被调用,所以:
- 如何强制在每次用户导航到视图时调用
activate? - 当我总是希望刷新数据获取逻辑时,是否有更好的挂钩来放置它?
- 或者,将我的激活逻辑放在
binding方法上是否存在固有问题?
【问题讨论】:
-
您是否尝试过将视图模型作为函数而不是单例返回?
-
为什么我需要为子路由中的视图而不是主路由中的视图执行此操作?没有太多的直观意义......
-
您是否在主路由器中缓存视图?
-
不。我尝试使用
cacheViews,在主路由器和子路由器上将其设置为true或false,但没有任何区别 -
您是否尝试在您的子路由器组合绑定上设置
alwaysTriggerAttach: true?
标签: durandal durandal-2.0