0

我在 Durandal 有一个具有功能的 ViewModel viewAttached()

根据文档,这应该在视图附加到 DOM 后调用。

在我的函数中,我有一个 jQuery 选择器,用于附加视图中的一个元素:

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

大多数情况下,我正确地将“1”打印到控制台,但可能有 10% 的时间我得到 0。视图实际上还没有附加到 DOM。

有没有其他人有这个问题?

4

2 回答 2

1

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

因此,您可以将代码更改为沿线的内容

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

如果你想用 jQuery 包裹整个视图或者

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

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

于 2013-05-09T19:06:43.420 回答
0

有几点需要注意:

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

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

于 2013-06-11T13:18:22.087 回答