2013-07-09 45 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'); 
}