私のアプリケーションは、ホット タオル テンプレート (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 関数全体が表示されます。ここで何が問題なのですか?