Как принудительно активировать при использовании маршрутов с одинаковым идентификатором модуля в Durandal?

Вот как я строю свои маршруты

[{
        route: 'Phone/:isWidget',
        moduleId: 'commonLog',
        title: 'phoneTitle',
        nav: true,
        hash: '#Phone',
        settings: { Communication: true }
},
{
        route: 'Letters/:isWidget',
        moduleId: 'commonLog',
        title: 'lettertitle',
        nav: true,
        hash: '#Letters',
        settings: { Communication: true }
}]

Что мне нужно сделать, так это заставить метод активации запускаться всякий раз, когда я маршрутизирую между ними.

Зачем мне это нужно?

В методе активации я вытаскиваю activeInstruction и получаю информацию о маршруте, и в зависимости от этого я меняю свои наблюдаемые и вызываю разные API, чтобы получить правильные данные, а также создать правильные столбцы для моей таблицы.


person Ibrahim Ahmed    schedule 24.07.2015    source источник


Ответы (1)


В модуле commonLog вам нужно установить атрибут canReuseForRoute, который является функцией, возвращающей false. Если ваш модуль является синглтоном:

return {
    // ...
    canReuseForRoute: function () {
        return false;
    },
    // ...
}

Если ваш модуль является функцией-конструктором:

return function () {
    // ...
    this.canReuseForRoute = function () {
        return false;
    };
    // ...
};

Тогда метод activate будет вызываться каждый раз.

Ссылка на документацию: http://durandaljs.com/documentation/Using-The-Router.html - см. раздел "Повторное использование модуля".

person leftclickben    schedule 29.07.2015