2010-04-10 52 views
6

我正在开发一个使用Asp.net mvc和jquery的应用程序。我想为不同视图中的html元素使用相同的命名约定(类和ID)。

如果我想异步加载部分视图,主视图中代码中的$(document).ready()代码失去了效用,因为没有任何patial视图的html标签和css命名被jquery识别。我当然不想为每个视图编写相同的代码。什么才是解决这个问题的最好方法?

+0

我添加了一个适用于事件的解决方案,大多数情况下,您还在运行插件等等......如果是的话,您是否可以包含更多关于您需要在动态加载的内容上运行的内容? – 2010-04-10 18:42:51

回答

9

您可以使用.live()这一点,例如:

$(".myClass").click(function() { }); 

变为这样:以不同的方式

$(".myClass").live('click', function() { }); 

.live()作品。 .click()绑定到选择器匹配的元素,当它运行时,通常是document.ready.live()通过生活在DOM根,侦听事件冒泡并执行处理程序,如果泡泡的目标与选择器匹配的事件。

+1

它适用于点击!对于不同部分视图中的元素所使用的插件呢?例如,dataTable()jquery插件必须适用于所有具有class =“grid”的元素,而不管它们来自哪个视图 – xantrus 2010-04-10 18:53:26

+0

如果我正确理解您的问题,那就没有问题了。您可以在文档中使用$(“。grid”)。live([eventname],function(){})...将其绑定到您使用的任何部分视图中的任何事件。 – 2010-04-10 19:15:17

+0

@ user252160 - 你如何加载这些'$ .ajax'? – 2010-04-10 19:15:33

0

我个人只是使​​用我自己的包装器在$ .post周围加载所有内容,并根据需要初始化内容。这也有助于统一处理错误,等待通知等。

第三方库通常也提供预处理ajax加载内容的方法。

部分视图不会调用document.ready,但它们将评估头部脚本标记内的脚本,这样就可以强制调用部分视图特定的脚本。

我使用的另一种方法是在窗体上定制html标签。例如。

<form custom-setup="MyCustomSetupFunc"> 

和我的$ .post处理程序将检查此标记并调用此函数,传递表单实例。这有助于在部分加载时缩小脚本的范围(在partial的几个实例可以加载到同一页面时有用)。

相关问题