在我选择的方法在JavaScript中完成执行后,如何连接事件以触发?

时间:2012-03-01 19:10:39

标签: javascript jquery asp.net-mvc events javascript-events

很难在一个问题中总结,但这里有详细信息:

我有一个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调用。有没有办法以编程方式附加回调以避免重复代码。我的主要目标是实现隐藏无格式内容,直到所有内容全局完成,因此我不必在每个视图中担心它。

1 个答案:

答案 0 :(得分:0)

您可以尝试将init过程的出现注册到全局变量(数组)中。这应该在document.ready()或JQuery等效之外完成。所以在<script>标签内。

当您的Init函数在document.ready()事件处理程序或它的JQuery等效函数内完成时,取消注册该事件。

取消注册时,检查是否有任何遗留,如果没有,请修改您的html样式。

在这种情况下,脚本解析和DOM实际完成加载之间的差距可能对你有用。