我正在使用Durandal和Bootstrap构建的SPA。我们最近开始尝试添加TabDrop来处理较小的屏幕。 Tapdrop会自动将任何不适合第一行的项目推送到下拉列表中。
我通过在任何包含标签的viewmodel中将$('.nav-tabs').tabdrop();
添加到附加功能,让我们的应用程序正常工作。这有效,但它很笨重。 (只有附加()工作,activate()太早,然后tabdrop不起作用。)
所以,这让我想知道:有没有办法可以插入这个函数,以便在attach()之前或之后直接调用?
答案 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