我有 3 条路线:items/one、items/two 和 items/three,它们都指向“items”vm/view。
在 items.js 激活函数中,我正在检查 url,并基于此,我正在更改过滤器:
function activate(r) {
switch (r.routeInfo.url) {
case 'items/one': vm.filterType(1); break;
case 'items/two': vm.filterType(2); break;
case 'items/three': vm.filterType(3); break;
}
return init(); //returns a promise
}
项目视图有一个带有一、二和三按钮的菜单。每个按钮都链接到这样的操作:
function clickOne() {
router.navigateTo('#/items/one');
}
function clickTwo() {
router.navigateTo('#/items/two');
}
function clickThree() {
router.navigateTo('#/items/three');
}
这一切都有效,我在视图上得到了正确的过滤器。但是,我注意到,如果我在“一”上,然后转到“二”,则 ko 绑定变量会“实时”更新,也就是说,随着它们的变化,在激活之前承诺解决,这会导致转换发生两次(在抓取数据时,以及在激活函数返回之后)。
这只发生在这种情况下,其中视图和视图模型与前一个相同。我知道这是一种特殊情况,路由器可能正在使用 areSameItem = true 处理新路由的加载。我可以将虚拟机/视图分成三个并尝试从基本模型继承,但我希望有一个更简单的解决方案。