很难在一个问题中总结,但这里有详细信息:
我有一个ASP.NET MVC 3项目(实际上很多)。
我的标准做法是每个视图都有一个Init()
方法,当文档准备好时会触发该方法。这是我放置所有UI代码的地方,如渲染按钮和手风琴等。
我通过将html
标记设置为display: none
来隐藏未格式化的html元素,并且在Init()
完成后,我可以取消隐藏所有内容。
这很好用,但我最初在我的布局页面中显示了内容,但是这会在视图的Init代码运行之前执行。如果我使用自己的Javascript部分视图,它会变得更加复杂。
我想要的是在我可能的Init()
个所有呼叫完成后触发的地方附加一个回调。
我尝试使用自定义事件,但是我必须在每个Init方法结束时触发它们,这样效率不高。
提前感谢您的帮助。
请求代码:
布局页面
<script>
$("html").addClass('init') // init has display: none
$(function() {
InitLayout() // Basic stuff for every page like menu, buttons, etc
$("html").removeClass('init'); // show all content
});
</script>
查看页面
<script>
$(function() {
ViewInit() // Init all custom ui elements on page: tabs, accordions, etc
});
</script>
问题是removeClass
会在每个页面Init
触发之前发生。我试图找到一种方法来避免在每个removeClass
方法的底部进行Init
调用。有没有办法以编程方式附加回调以避免重复代码。我的主要目标是实现隐藏无格式内容,直到所有内容全局完成,因此我不必在每个视图中担心它。
答案 0 :(得分:0)
您可以尝试将init过程的出现注册到全局变量(数组)中。这应该在document.ready()或JQuery等效之外完成。所以在<script>
标签内。
当您的Init函数在document.ready()事件处理程序或它的JQuery等效函数内完成时,取消注册该事件。
取消注册时,检查是否有任何遗留,如果没有,请修改您的html样式。
在这种情况下,脚本解析和DOM实际完成加载之间的差距可能对你有用。