0

我偶然发现了与DurandalActivator 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 -->
4

2 回答 2

2

你用的是什么版本的 Durandal?

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

无论版本如何,您都错误地拼写了“停用”方法。最后没有“d”。

于 2013-08-21T15:43:10.600 回答
1

查看https://github.com/dFiddle/dFiddle-1.2/blob/gh-pages/App/samples/knockout/index.js上的 Durandal 1.2 淘汰赛样本,了解如何手动使用activator.

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仅使用事件的子集来启用。

自 2.0 版本以来,Durandal 的 1.2 文档无法在线获得,但仍可从http://durandaljs.com/pages/downloads/下载。Hooking-Lifecycle-Callbacks.html这是解释该场景的相关部分。

  1. 路由器有一个名为“activeItem”的内部激活器来管理当前页面。
  2. 您可以随时通过要求视图模型模块并调用它的激活器函数来自己创建激活器。这将返回一个计算的 observable,它充当您的对象的激活器。
  3. 当您调用app.setRoot激活器时,将在您的根模块上使用。
  4. 如果您设置activate:true组合绑定,则在组合期间将使用激活器。

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

于 2013-08-22T10:53:24.027 回答