在我的shell中,我已经设置了我的路线:
router.map([
{ route: '', title: 'Search', moduleId: 'viewmodels/search/search' },
{ route: 'location/:paramX/:paramY', title: 'Location', moduleId: 'viewmodels/location/location' }
]).buildNavigationModel();
Run Code Online (Sandbox Code Playgroud)
我有一个像这样的激活方法:
activate: function(paramX, paramY) {
// TODO: set document title
// TODO: do something with input params
}
Run Code Online (Sandbox Code Playgroud)
对于位置页面,文档标题设置为Location | [我的应用名称].我想将此更改为由激活方法(paramX,paramY)中的params组成,用于我的位置页面的activate方法.我该怎么做呢?
mar*_*bit 10
您可以通过覆盖路由器进程的默认行为来设置标题来实现此目的.
导航完成后始终设置标题,因此之前已调用viewmodel的activate方法.Durandal 2.0目前的实施是:
router.updateDocumentTitle = function(instance, instruction) {
if (instruction.config.title) {
if (app.title) {
document.title = instruction.config.title + " | " + app.title;
} else {
document.title = instruction.config.title;
}
} else if (app.title) {
document.title = app.title;
}
};
Run Code Online (Sandbox Code Playgroud)
这是在方法completeNavigation中调用的router.js.
在instanceparam中,您有正在激活的ViewModel,因此可能的解决方案是覆盖updateDocumentTilte函数shell.js或main.js使用它instance来获取所需的值.例如,你可以做这样的事情(确保你有app和router实例):
router.updateDocumentTitle = function (instance, instruction) {
if (instance.setTitle)
document.title = instance.setTitle();
else if (instruction.config.title) {
if (app.title) {
document.title = instruction.config.title + " | " + app.title;
} else {
document.title = instruction.config.title;
}
} else if (app.title) {
document.title = app.title;
}
};
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我们检查实例(当前的ViewModel)是否包含一个方法setTitle,如果是,那么我们得到调用该函数的标题.然后在我们的viewmodel中我们可以有类似的东西:
define(function () {
var id;
var vm = {
activate: function (param) {
id = param;
return true;
},
setTitle: function () {
return 'My new Title ' + id; //Or whatever you want to return
}
};
return vm;
});
Run Code Online (Sandbox Code Playgroud)
如果您的viewmodel不包含此方法,那么它应该属于当前行为.
| 归档时间: |
|
| 查看次数: |
1899 次 |
| 最近记录: |