durandaljs - 导航到按钮点击查看

时间:2014-03-27 14:01:17

标签: durandal durandal-2.0 durandal-navigation

也许我错过了在durandal中导航的观点,但是如果我想在点击按钮上触发视图,这是怎么做到的?

我将按钮数据绑定到viewmodel中的click功能。但是,当加载viewmodel时,它会立即触发视图重定向。

视图:

<button data-bind="click: gotoPage('mypage')">go somewhere</button>

视图模型:

gotoPage: function(page){

    router.navigate(page);
}

3 个答案:

答案 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元素。)

此处有更多信息:Knockout documentation on foreach

答案 2 :(得分:0)

我相信你所缺少的只是路线前面的哈希字符。我试着在Frank的回答中添加评论,但还没有足够的声誉:(