jQuery与标准后端编程
我很想知道人们的喜好 我最近直接进入了jQuery,我很喜欢它。然而,我发现我正在用微小的jQuery函数替换许多(有些琐碎的)后端(tech:ASP.NET)函数。例如,我没有将导航按钮指定为后端控件,并在其页面登录时更改其类(即,在“关于我们”页面上突出显示“关于”按钮),而是简单地解析了URL并向按钮添加了一个类:jQuery与标准后端编程,jquery,server-side,Jquery,Server Side,我很想知道人们的喜好 我最近直接进入了jQuery,我很喜欢它。然而,我发现我正在用微小的jQuery函数替换许多(有些琐碎的)后端(tech:ASP.NET)函数。例如,我没有将导航按钮指定为后端控件,并在其页面登录时更改其类(即,在“关于我们”页面上突出显示“关于”按钮),而是简单地解析了URL并向按钮添加了一个类: var pathname = window.location.pathname; if (pathname == "/about/") { $("#nav-about"
var pathname = window.location.pathname;
if (pathname == "/about/") {
$("#nav-about").addClass("selected");
}
像这样的解决方案看起来相当简单(可能太简单),但我总是很谨慎,不能过分依赖JavaScript。还有其他人做过类似的事情吗?如果有,您如何维护这样的代码?您如何知道如何在每次都能运行的可靠的服务器代码和几乎每次都能运行的快速、新奇、闪亮的jQuery之间取得平衡,除非用户可能关闭了JavaScript
编辑
我不是在说这个特殊的例子。。。我说的是像这样的小改进。在jQuery增强方面,或者仅仅在服务器上实现时,您的底线是什么?谢谢:)在我过去的几个项目中,我有幸知道100%的用户都会启用Javascript。在这种情况下,我实际上做了一些非常类似的事情,您可以避免在导航服务器端突出显示当前页面 没有这样的奢侈,但是我认为这样的快捷方式是“推它”到使用jQuery——当然,你可以说“如果他们有JavaScript禁用,那么他们将不会看到导航页面突出,这不是什么大不了的”-虽然这可能是真的,有一个大的想法是避开一个更稳健的,在服务器端执行此操作的可靠方法,没有特别好的理由。重要的是,不要在客户端用“更简单”的代码取代经过战斗测试的服务器端解决方案。这很吸引人,但对你的项目和用户来说并不总是最好的事情,其中一些人会禁用JS,可能会在浏览导航时想知道他们在哪里,然后发现自己“迷路了”
总而言之,我建议您切换回服务器端代码。没有必要把它扔掉。我觉得主要的问题是搜索引擎,因为它们不解析js。我总是确保没有任何内容类型的东西都能正常工作,但我认为很少涉及设计师方面的东西是可以的。Javascript是HTML和CSS之上的额外一层。当你建立一个可访问的网站时,所有的东西都应该是HTML格式的。CSS和Javascript都只能用于增强用户体验 我甚至可以说,对于每一个页面界面或RIA,都应该有一个多页面的替代方案
因此,为了回答您的问题,这肯定是您希望在服务器上编写的代码,而不是在客户机上编写的代码。jQuery的问题在于它在文档就绪时启动。这在早期不是什么大问题,但是如果你有一个沉重的页面,在页面的其余部分加载完毕之前,这些突出显示的内容都不会出现。这意味着您可以看到一个“pop”,因为所有jQuery增强都会启动 最好只在服务器端做这种事情(尤其是.NET已经为您构建了站点地图时) 你怎么知道在哪里罢工 好的、可靠的服务器之间的平衡 每次都能快速工作的代码, 花式的、闪亮的jQuery,运行起来非常漂亮 每次都会有很多,除了用户 JavaScript可能已关闭 这听起来可能有些生硬,但偏袒不到5%的用户()是不公平的。对你来说,这也只是用户界面噩梦的起因
记住要区分服务器和客户端。服务器端代码就是这样的:属于服务器的代码,不会影响客户对最终产品的看法;让我们假设它对于客户端是不可变的。显示最终产品是可变的,有时鼓励快速更改以提供更深入的用户体验。如果在jQuery中做事情比在服务器端容易得多,我觉得您使用的似乎是笨拙的服务器端技术
对我来说,服务器端编程至少应该和客户端编程一样简单。我自己也喜欢jQuery,但可能会有一些我不得不担心的可访问性和功能性问题。我经常在禁用Javascript的情况下测试页面,以确保它能够与该受众一起工作(公共终端经常在IMHO中禁用Javascript),并在Lynx中了解屏幕阅读器如何查看我的页面 您可以在此处使用多种工具验证页面:
有助于确保您的页面仍然可以访问。我倾向于在行为方面进行优雅的降级,我不太在意客户端的东西是什么样子,只要系统能够正常工作并且能够按照其业务需求交付。样式和颜色以及所有这些漂亮的东西只属于提供给浏览器的文本,而不属于后端代码,除非样式元素的目标是提供所需的功能() 这就是说,我意识到,与此同时,我喜欢使用jQuery,而且它允许我在很短的时间内执行各种酷的客户端滑稽动作。因此,我的目标是构建一个可靠的系统(就像在所有这些无意义的脚本编写之前的好日子:)并完成它应该做的事情。在实现了这一点之后,对于额外的轻拍(和真正的rep),我将使用jQuery以一种不妥协的方式提升整个用户体验。提供一个简单的示例:
<a class="pageNo" href="/?p={$pageNo}">{$pageNo}</a>
该链接指向服务器上类似于www.random.com/things/?p=2的资源
jQuery('.pageNumber').click(function(e) {
//stop the link from firing
e.preventDefault();
//steal the page number from the tag
var pageNo = jQuery(this).text();
//assign it to a hidden field
jQuery('#pageNo').val(pageNo);
//use $.load to fill up a div with the results
loadPage(pageNo);
});
<body class="about-section">
<h1>This is a page in our About section!</h1>
...
<ul id="nav">
<li id="nav-home"><a href="/">Home</a></li>
<li id="nav-whatever"><a href="/whatever/">Whatever</a></li>
<li id="nav-about"><a href="/about/">About</a></li>
</ul>
</body>
#nav a {
color:#00F;
}
body.home #nav-home a,
body.whatever-section #nav-whatever a,
body.about-section #nav-about a {
color:#F00;
}