Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Durandal viewmodel中,视图不是';调用viewAttached()时不总是附加_Javascript_Mvvm_Durandal - Fatal编程技术网

Javascript 在Durandal viewmodel中,视图不是';调用viewAttached()时不总是附加

Javascript 在Durandal viewmodel中,视图不是';调用viewAttached()时不总是附加,javascript,mvvm,durandal,Javascript,Mvvm,Durandal,我在Durandal中有一个ViewModel,它有一个函数viewAttached() 根据这一点,应该在视图附加到DOM之后调用 在我的函数中,我为要附加的视图中的元素提供了一个jQuery选择器: function viewAttached() { console.log( $("#myViewId").length ); } 大多数情况下,我正确地将“1”打印到控制台上,但可能有10%的时间我得到0。该视图尚未实际附加到DOM 是否还有其他人有此问题?viewAttached获

我在Durandal中有一个ViewModel,它有一个函数
viewAttached()

根据这一点,应该在视图附加到DOM之后调用

在我的函数中,我为要附加的视图中的元素提供了一个jQuery选择器:

function viewAttached() {
    console.log( $("#myViewId").length );
}
大多数情况下,我正确地将“1”打印到控制台上,但可能有10%的时间我得到0。该视图尚未实际附加到DOM


是否还有其他人有此问题?

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

因此,您可以将代码更改为大致相同的代码

function viewAttached(view) {
    console.log( $(view).length );
}
如果要使用jQuery包装整个视图,或者

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

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

有几点需要注意:

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

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


  • 是的,那正是我最后要做的。幸运的是我可以,因为代码是我自己的,但是还有一些其他jQuery库在内部使用
    $(…)
    来做事情,总是假设您的元素将位于主DOM上。它的前后矛盾真的把我搞砸了。如果它总是在DOM中打开或关闭,至少它是一致的:)那么当您尝试访问它时,您的父对象是否已经在DOM中?docu表示:“这允许控制器或演示者在注入其父级后的某个时间点直接访问它绑定到的dom子树。”