我正在构建一个简单的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中实现导航路由器(生命周期)事件的方式是什么?
答案 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
}
});