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

元の「マップ」関数を引き続き呼び出したい場合は、上書きする前に保存する必要があります。この方法で関数を置き換えるのは少し「ハッキー」ですが、本当にそうしなければならない場合は、これでうまくいきます。

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 に答える