0

我的应用程序是一个使用 Hot Towel 模板(durandal.js、knockout.js、require.js)的单页应用程序。我正在尝试使用锚点更改为另一个视图,但它不起作用。我在带有敲除的锚标记中使用数据绑定(attr 属性)并调用 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。这里有什么问题?

4

2 回答 2

0
<li><a href="#dummy" data-bind="click: showAbout">About</a></li>

在您的虚拟机中,假设您有一个为“关于”映射的路由

function showAbout() {
   router.navigate('about');
}
于 2014-02-22T18:06:30.127 回答
0

showAbout是一个函数,所以这是预期的结果,不是吗?您可以尝试showAbout()改用,但您必须检查 的返回值router.activate是否是您要查找的哈希值。

如果您可以更早地通过 router.map 设置非安全敏感条目,那么您根本不需要函数并且可以简单地使用data-bind="attr: { href: '#About'}">About</a>.

于 2013-07-09T19:38:12.287 回答