2013-07-09 44 views
0

我的应用程序是使用热毛巾模板(durandal.js,knockout.js,require.js)的单页应用程序。我正在尝试使用锚来切换到另一个视图,但它不起作用。我在锚标记中使用了一个数据绑定(attr属性),并使用knockout并调用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); 
    } 
}); 

当我将鼠标放置在锚上,我看到整个激活功能,而不是#/关于我所期待的。这里有什么问题?

回答

0

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

如果您可以通过router.map更早设置非安全性敏感项,则根本不需要任何功能,只需使用data-bind="attr: { href: '#About'}">About</a>即可。

+0

感谢映射用于路线! href:#关于解决它对我来说。 – Chris

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

在你的虚拟机, 假设你有 '约'

function showAbout() { 
    router.navigate('about'); 
}