Durandal - 我可以拥有一个在绑定完成后始终被调用的函数吗?

时间:2014-12-09 22:02:23

标签: navigation single-page-application durandal

我正在使用Durandal和Bootstrap构建的SPA。我们最近开始尝试添加TabDrop来处理较小的屏幕。 Tapdrop会自动将任何不适合第一行的项目推送到下拉列表中。

我通过在任何包含标签的viewmodel中将$('.nav-tabs').tabdrop();添加到附加功能,让我们的应用程序正常工作。这有效,但它很笨重。 (只有附加()工作,activate()太早,然后tabdrop不起作用。)

所以,这让我想知道:有没有办法可以插入这个函数,以便在attach()之前或之后直接调用?

2 个答案:

答案 0 :(得分:1)

attached compositionComplete之后的内容。你可以在那里移动你的DOM访问者。

$('.nav-tabs').tabdrop()不是基于Durandal的方法。假设compositionComplete处理程序有效,它将如下所示:

compositionComplete = function (view, parent) {
    $(view).find('.nav-tabs').tabdrop();
}

此方法将对DOM的搜索限制为参与合成的视图。您可以使用attached处理程序以相同的方式约束,因为视图也会在那里公开。

更优雅的方法是编写自定义Knockout绑定。

activate太早的原因是DOM在那时尚未完全构建。

答案 1 :(得分:1)

是。在激活器生命周期中可以触发许多回调:

启用() 组成& Activator允许新对象执行自定义激活逻辑。

<强>结合() 组合在数据绑定发生之前立即通知新对象。

<强> bindingComplete() 组合在数据绑定发生后立即通知新对象。

<强>附() 组合在视图附加到其父DOM节点时通知新对象。

<强> compositionComplete() 合成当参与的合成完成时通知新对象。

有关详细信息,请参阅此处的文档: http://durandaljs.com/documentation/Hooking-Lifecycle-Callbacks.html#combined-lifecycle