Durandal Compose:激活方法并不总是被调用

Posted

技术标签:

【中文标题】Durandal Compose:激活方法并不总是被调用【英文标题】:Durandal Compose: activate method not always called 【发布时间】:2015-07-01 23:48:16 【问题描述】:

在 SPA 中,我有一个视图,其中包含使用 compose 绑定的另一个视图。这个子视图(子视图)有一个激活方法,在加载父视图时调用。

<div data-bind="compose: 'viewmodel/fol/index'"></div>

但是,当我离开父视图然后返回它(不刷新浏览器)时,不再调用子视图中的激活方法。如何在每次加载父视图时强制调用它?

【问题讨论】:

顺便说一句真的很好的问题 【参考方案1】:

由于您没有在此处使用路由器,因此子视图模型的行为将不遵守完整的激活生命周期。您可以采用两种方法:(a) 利用路由器或 (b) 手动激活子节点。

如果您想采用第一种方法,您将在 viewModel 上创建一个子路由器并创建一个 router 绑定而不是 compose 绑定。在这种情况下,这可能有点矫枉过正,所以我会跳过它。

根据您在此处提供的信息,更好的方法是不要尝试自动挂钩到激活生命周期。所以不要调用你的activate()函数激活,而是调用它init()

function folIndexViewModel() 

  this.init = function() 
    ...
  ;

在你的父母中,让你的激活函数调用 init

var child = require('viewmodel/fol/index');
function parentViewModel() 

    this.activate = function()  
        child.init();
    

请注意,这种方法仅适用于您的孩子是单身人士的情况。本文底部有更多相关信息:http://durandaljs.com/documentation/Creating-A-Module.html

【讨论】:

以上是关于Durandal Compose:激活方法并不总是被调用的主要内容,如果未能解决你的问题,请参考以下文章

Durandal - 激活 DOM 后运行 datePicker

你可以通过 Durandal activationData compose 绑定传递多个参数吗?

Durandal js,所有功能在启动时激活

Durandal JS 淘汰赛延期更新

以编程方式生成/激活的文件输入并不总是触发 `input` 事件

将 compose 数据绑定与另一个数据绑定一起使用