杜兰达尔's激活剂

Durandal's activator

本文关键字:激活 杜兰达      更新时间:2023-09-26

我在Durandal中偶然发现了与Activator Lifecycle Callback相关的问题。

这是我的模型和一堆回调。

define(function () {
    return {
        activate: activate,
        viewAttached: viewAttached,
        detached: detached,
        deactivate: deactivate,
        title: 'Lifecycle'
    };
    function activate() {
        debugger;
    }
    function viewAttached() {
        debugger;
    }
    function detached() {
        debugger;
    }
    function deactivate() {
        debugger;
    }
});

但没有提出分离的停用的方法。

根据文档,这些回调在存在激活程序时运行。因此,问题是如何将激活器模块添加到我的模型中?

更新:模型的组成看起来像:

<!-- ko compose: { model: 'lifecycle', activate: true } -->
<!-- /ko -->

您使用的是什么版本的Durandal?

如果您使用的是Durandal 1.x,则不存在"分离"方法。它是在2.0版本中添加的。此外,在2.0版本中,"viewAttached"方法已更改为"attached"。

无论版本如何,"deactivate"方法的拼写都不正确。结尾没有"d"。

在https://github.com/dFiddle/dFiddle-1.2/blob/gh-pages/App/samples/knockout/index.js例如如何手动使用CCD_ 2。

define(function () {
    var system = require('durandal/system'),
        viewModel = require('durandal/viewModel');
    return {
        activeSample:viewModel.activator(),
        introSamples: [{
            name: 'Hello World',
            hash: '#/knockout-samples/helloWorld',
            moduleId: 'samples/knockout/helloWorld/index'
        }, 
        ...
        ],
        activate: function (args) {
            var that = this;
            if (!args.name) {
                args.name = 'helloWorld';
            }
            return system.acquire('samples/knockout/' + args.name + '/index').then(function(sample) {
                that.activeSample(sample);
            });
        }

默认情况下,router实现一个激活器,因此所有事件生命周期事件都可用。通过使用activate: true,仅启用事件的子集。

Durandal的1.2文档自2.0发布后就无法在线获取,但仍可从http://durandaljs.com/pages/downloads/.以下是Hooking-Lifecycle-Callbacks.html中解释该场景的相关部分。

  1. 路由器有一个名为"activeItem"的内部激活程序,用于管理当前页面
  2. 您可以随时自己创建一个激活器,方法是需要视图模型模块并调用它的激活器函数。这会返回作为对象的激活器的计算可观察对象
  3. 当您调用app.setRoot时,会在根模块上使用一个激活器
  4. 如果在组合绑定上设置activate:true,则在组合过程中将使用激活剂

注意:情况3和4有点不同,因为它们只强制执行canActivateactivate回调;而不是去激活生命周期。要启用此功能,您必须自己使用完全激活器(情况1或2)。