0

クロスロードとrequirejsを使用して一致するルートを取得するのに問題があります。まあ、それはおそらくrequirejsとは何の関係もないので、言及したいと思いました。

これは私のコードがどのように見えるかです:

require.config({
    shim: {
        /* use shims to define dependencies for modules. e.g.,
        'jquery.colorize': ['jquery'],
        'jquery.scroll': ['jquery'],
        */
        'crossroads': ['signals', 'can']
    },
    paths: {
        "jquery": "http://code.jquery.com/jquery-1.8.2",
        "can": "/scripts/can/amd/can",
        "can.fixture": "/scripts/can/amd/can/util/fixture",
        "signals": "/scripts/signals/signals",
        "crossroads": "/scripts/crossroads/crossroads"
    }
});

require(['jquery', 'crossroads', 'controllers/project'], function ($, crossroads, projectController) {
    var projectRoute = crossroads.addRoute('projects', function () {
        $(document).ready(function () {
            console.log('projects ready');
            $.when(ProjectModel.findAll()).then(function (projectResponse) {
                var projects = new SortList(projectResponse);
                console.log('doc ready projects=', projects);

                new ProjectsControl('#projects', {
                    projects: projects,
                    defaultSort: 'priority'
                });
            });
        });
    })
    console.log('matched: ', projectRoute.match(window.location.href));
});

一致させようとしている URL はhttp://localhost:34382/projects、console.log の出力は「matched: false」です。

助言がありますか?

4

1 に答える 1

0

一致するものを変更する必要があることがわかりました。この行を変更しました

console.log('matched: ', projectRoute.match(window.location.href));

これに

console.log('matched: ', projectRoute.match(window.location.pathname + window.location.search));

そして今それは動作します。

また、 crossroads.parse() を機能させるには、どこかで明示的に呼び出す必要があることにも気付きました (または、何か不足していますか?)

したがって、require関数の最後でこれを呼び出すと、ルートが見つかります

crossroads.parse(window.location.pathname + window.location.search);

また、誰かが疑問に思っている場合に備えて、クライアント側の MVC フレームワークとして CanJS を使用し、サーバー側として ASP.NET MVC4 を使用しています

于 2012-12-28T03:28:31.427 に答える