Javascript 杜兰达尔';s激活剂

Javascript 杜兰达尔';s激活剂,javascript,durandal,Javascript,Durandal,我在Durandal中偶然发现了与激活器生命周期回调相关的问题 这是我的模型,有很多回调 define(function () { return { activate: activate, viewAttached: viewAttached, detached: detached, deactivate: deactivate, title: 'Lifecycle' }; function

我在Durandal中偶然发现了与
激活器生命周期回调相关的问题

这是我的模型,有很多回调

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;
    }
});
但未提出分离的停用的方法

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

更新:模型的组成如下所示:

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

您使用的是什么版本的Durandal

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


无论版本如何,您都无法正确拼写“deactivate”方法。结尾没有“d”。

您使用的是什么版本的Durandal

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


无论版本如何,您都无法正确拼写“deactivate”方法。末尾没有“d”。

以Durandal 1.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发布后就不再在线提供,但仍可以从下载。下面是
Hooking Lifecycle Callbacks.html
中的相关部分,解释了该场景

  • 路由器有一个名为“activeItem”的内部激活器,用于管理当前页面
  • 您可以随时自己创建一个激活器,方法是需要视图模型模块并调用其激活器函数。这是回报 作为对象激活器的计算可观察对象
  • 调用
    app.setRoot
    时,根模块上会使用一个激活器
  • 如果在合成绑定上设置了
    activate:true
    ,则在合成期间将使用激活器
  • 注意:案例3和案例4有点不同,因为它们只强制canActivate和activate回调;而不是停用生命周期。 要实现这一点,您必须自己使用完全激活器(案例1或案例2)


    以Durandal 1.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发布后就不再在线提供,但仍可以从下载。下面是
    Hooking Lifecycle Callbacks.html
    中的相关部分,解释了该场景

  • 路由器有一个名为“activeItem”的内部激活器,用于管理当前页面
  • 您可以随时自己创建一个激活器,方法是需要视图模型模块并调用其激活器函数。这是回报 作为对象激活器的计算可观察对象
  • 调用
    app.setRoot
    时,根模块上会使用一个激活器
  • 如果在合成绑定上设置了
    activate:true
    ,则在合成期间将使用激活器
  • 注意:案例3和案例4有点不同,因为它们只强制canActivate和activate回调;而不是停用生命周期。 要实现这一点,您必须自己使用完全激活器(案例1或案例2)


    谢谢你的解释!我使用的是1.2版。所以我已经纠正了拼写错误,但仍然没有成功触发“deactivate”方法。也许我不得不提一下,这个模型被用作局部模型。如您所见,我使用“激活:真”。这种方法是否会以某种方式影响生命周期事件?啊!是的,那会有所不同。Durandal有两种不同的生命周期:成分和活化剂。由于您正在使用此视图的无容器合成,Durandal将使用其合成生命周期。在此生命周期中,没有“停用”挂钩。请仔细阅读。谢谢你的解释!我使用的是1.2版。所以我已经纠正了拼写错误,但仍然没有成功触发“deactivate”方法。也许我不得不提一下,这个模型被用作局部模型。如您所见,我使用“激活:真”。这种方法是否会以某种方式影响生命周期事件?啊!是的,那会有所不同。Durandal有两种不同的生命周期:成分和活化剂。由于您正在使用此视图的无容器合成,Durandal将使用其合成生命周期。在此生命周期中,没有“停用”挂钩。请仔细阅读。如果您正在谈论durandal 2.x,那么根据文档,当不存在activator时,将运行此回调。这是指向文档的链接,请参见页面顶部的“要点:
    Activator回调不会执行,除非有Activator存在。
    如果您是在谈论durandal 2.x,那么根据文档,当Activator不存在时,此回调会运行。这是指向文档的链接,请参阅页面顶部的“要点”:
    Activator回调不会执行,除非有Activator。