也许我错过了在durandal中导航的观点,但是如果我想在点击按钮上触发视图,这是怎么做到的?
我将按钮数据绑定到viewmodel中的click功能。但是,当加载viewmodel时,它会立即触发视图重定向。
视图:
<button data-bind="click: gotoPage('mypage')">go somewhere</button>
视图模型:
gotoPage: function(page){
router.navigate(page);
}
答案 0 :(得分:2)
你可以发布整个视图模型吗?也许你的激活功能中有一些东西导致了重定向。这是一个应该有效的例子:
define(['durandal/app',
'knockout',
'plugins/router'],
function (app, ko, router) {
var vm = {
CurrentEntity: ko.observable(),
GoToPage: GoToPage
activate: activate
};
return vm;
function GoToPage(page) {
router.navigate(page);
};
function activate() {
// activation code here, make sure no redirect code exists here
};
);
激活功能中的代码将在加载模型时运行。如果您有任何重定向代码可能是您的问题。如果您想要一起绕过该功能,您还可以将按钮更改为锚点,只需将href指向您的路线,如下所示:
<a href="#/MyDurandalRoute" >go somewhere</a>
答案 1 :(得分:1)
你的数据绑定属性中的javascript,“click:gotoPage('mypage')”,在绑定时被评估,即“gotoPage('mypage')”在绑定时被执行,结果被绑定到点击事件。
所以你需要绑定一个属性,该属性指向所需的函数。
换句话说,在您的视图中执行此操作:
<button data-bind="click: gotoMyPage">go somewhere</button>
并在viewmodel中执行类似的操作:
define([
'durandal/app',
'knockout',
'plugins/router'],
function (app, ko, router) {
var vm = {
CurrentEntity: ko.observable(),
gotoMyPage: GoToPage
activate: activate
};
return vm;
function GoToPage() {
router.navigate('#mypage');
};
function activate() {
// activation code here, make sure no redirect code exists here
};
);
B部分
您的GoToPage例程可以使用参数,例如
function GoToPage(page) {
router.navigate(page.mypage);
};
查看:
<table>
<tbody data-bind="foreach: listOfPages">
<tr>
<td data-bind="text: mypage, click: gotoMyPage"></td>
</tr>
</tbody>
</table>
(其中listOfPages包含页面对象列表,每个页面对象都有一个mypage元素。)
答案 2 :(得分:0)
我相信你所缺少的只是路线前面的哈希字符。我试着在Frank的回答中添加评论,但还没有足够的声誉:(