【问题标题】:1 viewmodel multiple routes: lifecycle1 viewmodel 多条路线:生命周期
【发布时间】:2014-03-31 10:26:56
【问题描述】:

我希望有几条不同的路线指向同一个视图/视图模型,我已经设法做到了。

            { route: 'formulation',             moduleId: 'formulation',    title: 'Formulation',       nav: 6 },
            { route: 'fabrication',             moduleId: 'test',           title: 'Fabrication',       nav: 7 },
            { route: 'fabrication/:studyId',    moduleId: 'test',           title: 'Fabrication'               },
            { route: 'characterization',        moduleId: 'test',           title: 'Characterization',  nav: 8 },

但是,我在生命周期方面遇到了一点问题。当哈希从一个哈希更改为另一个哈希时,我希望得到通知。例如从制造到表征。理想情况下,我可以只更新一些变量,但我不反对重建视图/视图模型。问题是你们中的一些人可能知道什么时候将 moduleId 更改为与以前的 moduleId 相同时激活钩子不会触发。这个具体应该怎么处理。 谢谢, 卡尔文

【问题讨论】:

    标签: knockout.js durandal


    【解决方案1】:

    我认为您最好的选择是覆盖激活器上的areSameItem(由路由器创建为activeItem)。在应用程序连接的早期某个地方,尝试这样做:

    var routerAreSameItem = router.activeItem.settings.areSameItem;
    
    router.activeItem.settings.areSameItem = function (currentItem, newItem, currentActivationData, newActivationData) {
        debugger;
        return routerAreSameItem.apply(this, _.toArray(arguments));
    };
    

    显然,这个特定的实现不会做任何事情;但是您应该能够在 areSameItem 方法中提供一些自定义逻辑来区分项目更改。

    如果我没记错的话,从该方法返回 false 应该会调用您的 activate 方法。

    【讨论】:

    • 嗨 gerrod,你的记忆正确地为你服务 :-) 你知道将这个 areSameItemproperty 设置为总是返回 false 是否有任何缺点
    • 不是真的;如果您想要在每次页面加载时激活触发,那么这就是要走的路(即它的设计)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多