0

これが私のルーター構成です:

        router.useConvention();

        router.mapRoute('error', 'viewmodels/error', "Error");

        router.mapNav('home');
        router.mapRoute('api', 'viewmodels/api', 'API Reference');
        router.mapRoute('set/:id', 'viewmodels/set', 'Set');
        router.mapRoute('folder/:id', 'viewmodels/folder', 'Folder');

        router.handleInvalidRoute = function (route, params) {
            //debugger;
            router.navigateTo('#/error');
        };

        logger.log('app has loaded :)', null, null, false);

        return router.activate('home');

/api やその他のページを見つけることができますが、無効なルートを入力すると、Chrome コンソールに次のように表示されます。

ここに画像の説明を入力

他のページと同じように、error.js と error.html があります。App/viewmodels/error.js にありますが、他のビュー/vm でフォルダーを指定する必要はありません...なぜ見つからないのですか?

編集ジョセフの提案に従って、「エラー」でアクティブにすると、次のようになります。

ここに画像の説明を入力

私はとても混乱しています...なぜそれはすでに正しい場所にあるのにerror.jsを探しているのですか?なぜその場所でhtmlドキュメントを見つけようとしていると思いますか?

私は従来のファイル構造を持っています:

ここに画像の説明を入力

4

2 に答える 2

1

あなたの問題はerror.js自体にあることがわかりました。Google グループでファイルをリクエストした後、問題を再現することができました。

これを変える:

define(['services/dataservice'], function (dataservice) {
    var data = "error";
    return data;
})

これに:

define(['services/dataservice'], function (dataservice) {
    var data = "error";
    return {}
})

文字列を返していた場合、Durandal は「/App/error.js」で指定されたパスで viewModel を探していると想定します。オブザーバブルなどをバインドするために使用する何らかのオブジェクトを返す必要があります。

于 2013-04-16T01:22:20.423 に答える
-1

次のコードを追加してください: router.mapRoute('pagenotfound', 'viewmodels/pagenotfound', 'page not found', false);

于 2013-07-03T11:12:18.630 に答える