0

私のアプリケーションは、ホット タオル テンプレート (durandal.js、knockout.js、require.js) を使用したシングル ページ アプリケーションです。アンカーを使用して別のビューに変更しようとしていますが、うまくいきません。ノックアウトを使用してアンカー タグでデータ バインド (属性プロパティ) を使用し、showAbout メソッドを呼び出しています。これが私のhtmlです-

  <li><a data-bind="attr: { href: showAbout }">About</a></li>

私のshell.jsビューモデル -

 define(['durandal/system', 'durandal/plugins/router', 'services/logger', 'services/SecurityDataService'],
function (system, router, logger, SecurityDataService) {

    var HasAccess = ko.observable();

    var vm = {
        activate: activate,
        router: router,
        User: ko.observable(),
        showAbout: showAbout
    };
    return vm;

    function showAbout() {

        router.map([
            { url: 'About', moduleId: 'viewmodels/About', name: 'About', visible: false }
        ]);


        return router.activate('About'); // should show about view
    }

    function activate() {

        $.when($.getJSON('/api/security', function(data) {
            strHasAccess = "";
            if (typeof (data) == "string") {
                strHasAccess = $.parseJSON(data);
                HasAccess = strHasAccess[0].HasAccess;
                vm.User = strHasAccess[0].UserName;
                $('#spnUserName').text(vm.User);
            } else {
                HasAccess = false;
            }

            return strHasAccess;
        })).then(function (HasAccess) {

            if (strHasAccess[0].HasAccess == true) {
                router.mapNav('home');
                router.mapNav('CAApproval');
                vm.User = strHasAccess[0].UserName;
                return router.activate('home');

            }
            else {
                router.map([
                    { url: 'AccessDenied', moduleId: 'viewmodels/AccessDenied', name: 'AccessDenied', visible: false }
                ]);


                return router.activate('AccessDenied'); // should show details page of a particular folder
                log('Access Denied!', null, true);
            }
        });
    }

    function log(msg, data, showToast) {
        logger.log(msg, data, "shell.js", showToast);
    }
});

アンカーにマウスオーバーすると、期待していた #/about ではなく、activate 関数全体が表示されます。ここで何が問題なのですか?

4

2 に答える 2

0

showAboutは関数なので、これは期待される結果ですね。代わりに試すことshowAbout()もできますが、の戻り値router.activateが探しているハッシュであるかどうかを確認する必要があります。

以前に router.map を介してセキュリティに影響されないエントリをセットアップできた場合、関数はまったく必要なく、単に を使用できますdata-bind="attr: { href: '#About'}">About</a>

于 2013-07-09T19:38:12.287 に答える