3

親ルートが変更されたときに無効化イベントを発生させる方法。たとえば、「HTML サンプル」では、Master-Detail ページがアクティブなときに、ビューを別のビューに変更します。ここで「退出しますか....」というダイアログを強制する方法は?

ウラジミールに感謝します。

更新:

ダイアログを置き換えた 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;
});

現在、選択コントロールを使用して詳細ビューを変更することはできません。しかし、ナビゲーションパネルからモジュール全体を簡単に変更できます。

4

2 に答える 2

1

探しているのは canDeactivate 属性です。ダイアログプラグインを使用して、ダイアログを表示できます。canDeactivate 関数が true を返す場合、ビューは非アクティブになります。false が返された場合、ビューは残ります。

アップデート

ルーターにバグがあり、親のビューモデルが非アクティブ化/移動されたときに子のビューモデルが適切に非アクティブ化されないという問題があります。ここを参照してください: https://github.com/BlueSpire/Durandal/issues/570

http://durandaljs.com/documentation/Using-Activators/ http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks/を参照してください 。

于 2013-10-03T14:28:05.833 に答える