在Durandal视图模型中,当viewAttached()调用时,视图并不总是附加

时间:2013-05-09 18:45:54

标签: javascript mvvm durandal

我在Durandal中有一个具有函数viewAttached()的ViewModel。

根据the docs,应该在视图附加到DOM之后调用它。

在我的函数中,我有一个jQuery选择器,用于连接View中的元素:

function viewAttached() {
    console.log( $("#myViewId").length );
}

大多数时候我正确地将“1”打印到控制台,但可能有10%的时间我得到0.视图尚未实际附加到DOM。

还有其他人有这个问题吗?

2 个答案:

答案 0 :(得分:1)

viewAttached获取作为参数传入的生成的DOM子树。

所以你可以将代码更改为行

function viewAttached(view) {
    console.log( $(view).length );
}

如果你想用jQuery或

包装整个视图
function viewAttached(view) {
    console.log( $(view).find('mySubSelector').length );
}

如果您需要使用某些特定的子树元素。

答案 1 :(得分:0)

有几点需要注意:

  1. viewAttached在当前模块的视图附加到它的直接父级之后触发,这不一定是在它附加到DOM时。在某些情况下,这是一个明显的限制。对于Durandal 2.0,我们正在添加一个名为documentAttached的附加回调,当所有内容附加到页面的dom时会触发。

  2. viewAttached传递当前模块的视图。您应该使用它来为您编写的任何jQuery代码提供上下文。