0

我正在尝试扩展已经在 RequireJS 的帮助下创建的现有 Durandal 路由器插件实例。

map()应该重写该方法以添加额外的映射参数。

我应该如何从修改后的方法访问原始方法?

index.js

define([ 'durandal/app', 'app/childRouter'], function(
        app, childRouter) {
    childRouter.map([ {
        route : 'details/:id',
        moduleId : 'details/index',
    }, {
        route : 'details/tabs/base',
        moduleId : 'details/tabs/base',
    } ]);
    childRouter.buildNavigationModel();

    return {
        router : childRouter
    };
});

childRouter.js

define([ 'durandal/app', 'plugins/router'], function(
        app, router) {

    var childRouter = router.createChildRouter();
    childRouter._map = childRouter.map;
    childRouter.map = function(data) {
        data.unshift({
            route : [ '', 'grid' ],
            moduleId : 'grid/index',
        });
        childRouter._map(data);//CALLS THE OVERRIDEN METHOD AGAIN INSTEAD OF ORIGINAL
    };
    return childRouter;
});
4

1 回答 1

1

如果您仍想调用原始的“map”函数,则需要在覆盖之前将其存储起来。以这种方式替换函数有点“hacky”,但如果你真的必须这样做,这将起作用:

var childRouter = router.createChildRouter();
childRouter.originalMap = childRouter.map;  // Save original
    childRouter.map = function(data) {
        data.unshift({
            route : [ '', 'grid' ],
            moduleId : 'grid/index',
        });
        childRouter.originalMap(data);    // Call original
    };
于 2016-02-11T17:49:19.413 回答