1

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

假设我有这种带有视图和内容的视图模型。每次用户导航到页面时,如何让它加载其数据(即调用 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 中实现导航路由器(生命周期)事件的方式是什么?

4

1 回答 1

4

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

组合生命周期 getView、激活、绑定、绑定完成、附加、组合完成、分离

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

将您的数据调用放入您的激活方法中 -

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
    }
});
于 2013-09-28T13:40:44.237 回答