如何在父路线更改时触发停用事件。 例如,在“HTML示例”中,当“主 - 详细信息”页面处于活动状态时,将视图更改为另一个。 如何强制对话“你想离开......”吗?
由于 弗拉基米尔。
UPD:
带有替换对话框的HTML示例代码
project.js
define(['durandal/system', 'durandal/app'], function (system, app) {
var ctor = function (name, description) {
this.name = name;
this.description = description;
};
ctor.prototype.canActivate = function () {
return true; //!!! CHANGED!!!
};
ctor.prototype.activate = function () {
system.log('Model Activating', this);
};
ctor.prototype.canDeactivate = function () {
return false; //!!! CHANGED!!!
};
ctor.prototype.deactivate = function () {
system.log('Model Deactivating', this);
};
return ctor;
});
现在,您无法使用选择控件更改详细信息视图。 但很容易通过导航面板更改整个模块。
答案 0 :(得分:1)
您正在寻找的是canDeactivate属性。您可以使用对话框插件显示对话框。如果canDeactivate函数返回true,则视图将停用。如果返回false,则视图将保留。
<强>更新强>
是路由器中的一个错误,即wontfix,当父视图模型被停用/导航时,子视图模型未正确停用。见这里:https://github.com/BlueSpire/Durandal/issues/570
请参阅 http://durandaljs.com/documentation/Using-Activators/ http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks/
答案 1 :(得分:1)
这是一个超级迟到的回答。我正在维护一个现有的durandal应用程序。我的快速修复是在父项的停用中手动调用子视图模型的停用。但是,可以多次调用子项停用。
Shell.prototype.deactivate = function(){
this.router.activeItem().deactivate();
};