视图模型可访问Durandal导航事件

时间:2013-09-28 10:39:05

标签: javascript events navigation router durandal

我正在构建一个简单的durandal应用程序。我有一些viewmodels已经从服务器加载它的数据,它们彼此依赖。为了使它们保持同步,我想在导航到的时候重新加载viewmodel的数据。我想到的是尝试使用某种导航事件。使用它的最佳方法是什么?

假设我有这种视图模型及其视图和内容。每次用户导航到页面时如何使其加载数据(即调用loadData函数)?

define(["knockout", "./repository"], function (ko, repository) {
    // Door viewmodel
    var list = ko.observableArray();

    function loadData() {
        // use repository to load the data
        // map the data to list array
    }

    return {
        list: list, 
        loadData: loadData
    }
});

我主要关注Durandal提供的示例应用程序,我的路由器配置基于示例使用的示例。

define(["knockout", "plugins/router"], function(ko, router) {

    var childRouter = router.createChildRouter()
        .makeRelative({
            moduleId: "vm/catalog",
            fromParent: true
        }).map([
            { route: ["", "door"], moduleId: "door/index", title: "Drzwi", nav: true },
            { route: "doorType", moduleId: "doorType/index", title: "Typy drzwi", nav: true },
            { route: "accessory", moduleId: "accessory/index", title: "Akcesoria", nav: true }
        ])
        .buildNavigationModel();

    return {
        router: childRouter
    }
});

当导航到页面或以某种方式将对象传递给模块本身来管理事件时,是否有办法在路由器内调用该函数?换句话说,在Durandal中实现导航路由器(生命周期)事件的方式是什么?

1 个答案:

答案 0 :(得分:4)

您需要阅读文档,您正在寻找的所有答案都在那里。

  

撰写生命周期    getView,activate,binding,bindingComplete,attach,compositionComplete,detached

http://durandaljs.com/documentation/Using-Composition

将您的datacall放入您的activate方法 -

define(["knockout", "./repository"], function (ko, repository) {
    // Door viewmodel
    var list = ko.observableArray();

    function loadData() {
        // use repository to load the data
        // map the data to list array
    }

    function activate () {
        loadData();
    }

    return {
        list: list,
        activate: activate, 
        loadData: loadData
    }
});