gpt4 book ai didi

jquery - 如何构建 Web 应用程序以使 AJAX 和 DHTML 更容易?

转载 作者:行者123 更新时间:2023-12-01 00:28:50 25 4
gpt4 key购买 nike

鉴于 websinte 的结构

<html>
<head>
<!-- CSS at the beginning-->
<link/>
</head>
<body>
<div id="mainContainer">
<div id="side"></div>
<div id="content">
<!-- DHTML awesomeness happens here -->
</div>
</div>
<!-- Scripts at the end -->
<script/>
<script>
/* code that attach the JS logic to the HTML items */
</script>
</body>
</html>

使用正常的 Web 导航,页面完全以 HTML 形式呈现,并遵循渐进增强方法,最后我会查找一些特定的 id 或类,并使用 javascript(特别是 jQuery)为它们提供动态行为。此增强代码发生在正文的最后,在下载外部脚本之后。

#content ,发生了很多 jQuery AJAX 交互,其中一些从服务器获取其他部分 View 并将它们插入到页面中,但随后我必须再次查找这些 id 和类并将 javascript 对象附加到这个新元素。

这可能非常麻烦,因为您不想将 Controller 、事件处理程序或其他任何内容重新应用到已经拥有它们的对象。

到目前为止,我找到的唯一解决方案是放在我的部分 View 中:

@if(Request.IsAjaxRequest())
{
<script>
/* code that attach the JS controllers to the HTML items of this view */
</script>
}

我认为,例如当您想要 $('input.date').datepicker() 时,就会发生类似的问题。 ,然后添加新的 <input type="text" class="date"/>动态元素,新元素没有日期选择器,除非您重新执行 jQuery 语句。

例如,考虑到 #content我有一个<input type="text" class="date"/> :

  1. 为了使 jQuery datepicer 第一次工作,我必须调用$('input.date').datepicker()<body> 的末尾,外部后<script>声明。

  2. 如果页面下载了新的部分 View <input type="text" class="date"/>elements,我必须将初始化调用放在ajax View 中来电。

所以我以重复的代码结束,这是我不想要的,特别是在 JS 中,因为我无法像在 C# 中那样轻松地重构代码。

上周这件事让我抓狂,想知道是否有更好的方法来实现这一目标?更好的技术,还是其他整体方法?

您如何构建 Web 应用程序?

亲切的问候。

PS:如果有类似 .live() 的东西就好了或.delegate()但不仅仅与事件有关,不是吗?每次向 DOM 添加内容时,jQuery/浏览器是否都会引发任何事件?

最佳答案

如果我理解正确的话,这可能只是您问题的部分答案。

关于您的示例 <input type="text" class="date" /> ,我们在使用 jQuery 非侵入性验证的部分表单 View 中遇到了类似的问题。当在浏览器中加载它们时,我们必须调用 $.validator.unobtrusive.parse('a form selector');以便在下一次提交表单时应用验证规则。

如果您的目标是避免重复的代码,您可以使用 jq 不引人注目的验证库中的模式使 js 操作不引人注目。所以你最终会得到看起来更像这样的 HTML:

<input type="text" class="date" data-datepicker="true" />

然后您可以将初始化逻辑放入不显眼的解析方法中。

parse: function(selector) {
$(selector).find(':input[data-datepicker=true]').each(function() {
$(this).datepicker();
}
};

}

这解决了您在一个地方重构代码的问题。您可以使其在页面首次加载时自动启动,并且当您通过ajax加载新内容时,只需调用myAppNamespace.unobtrusive.parse('selector for the partial view content');即可将规则应用于所有匹配的元素。

更新

查看脚本文件夹中的 jquery.validate.unobtrusive.js 文件。它确实非常智能,如果您实际上没有扩展另一个 jquery 插件(例如 validate),您的代码最终会变得更精简。如果您正在寻求 HTML 和脚本的完全分离,那么在我看来,使用 HTML5 不显眼的数据属性是一个很好的解决方案。

关于jquery - 如何构建 Web 应用程序以使 AJAX 和 DHTML 更容易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8346437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com