这是一个反复出现的主题:要么AJAX导致从服务器请求数据,然后向用户显示数据,要么使用与Javascript进行某种交互的数据预先填充(即呈现)页面
以下是我看到如何存储和操作(复杂)数据的几种可能性:
将数据存储在DOM中,并使用Javascript从DOM获取,对数据执行某些操作并相应地操作DOM以显示结果。获取和存储数据(多个隐藏字段)可能是一个真正的混乱,与从Javascript获取数据相比,多个选择器可能会很慢。在预填充场景中,好处是搜索引擎蜘蛛可以索引/抓取数据,并且页面无法启用Javascript(优雅地降级)。
使用Javascript作为容纳数据的容器,仅使用DOM来可视化数据。当触发某个动作时,从DOM获取的唯一内容就像实体的ID一样,因此我们知道在Javascript中我们指的是哪个对象。但是预先填充的数据如何推向Javascript?如果我们只是将它们呈现给DOM,我们就会回到从DOM获取的场景。我们可以将JSON字符串呈现给页面的<script
&gt;标签,然后填充DOM(但这可能有缓存问题?)。或者我们可以使用AJAX懒惰地请求数据(但这会导致不必要的服务器负载)。
使用现成的容器,就像一些jQuery表插件(jqGrid)。但是总是不可能总是使用这样的插件,因为需要进行大量的自定义,或者组件对于你的场景来说只是一种过度杀伤。
此外,您是否倾向于尽可能在服务器上渲染(使用RenderPartial)并返回可能两者,数据及其呈现的HTML / Javascript?
我试图在没有太多成功的情况下搜索有关此主题的文章。欢迎任何指导,建议和指示。
答案 0 :(得分:1)
查看像JSONStore
这样的extjs数据存储答案 1 :(得分:1)
我的(当前)方法是尽可能减少JavaScript。显然,只有一个处理内容布局的地方也是合适的。因此,我倾向于渲染布局,因为它需要用于它所使用的给定位置。所以,是的,Render方法将适当地渲染所有内容(不仅是原始数据,即一些JSON字符串或者你有什么)。对我来说,这具有优势,因为实现“非JavaScript”场景通常是微不足道的,其中内容不是通过Ajax加载,而是作为其他页面上的嵌入内容加载。
然而,这只是我的方法。它不是最好的方式,可能会有所变化。我希望它能为决策过程提供一些指示,而不是用于达到特定模型。
答案 2 :(得分:0)
默认情况下,Javascript是一种非常强大的动态语言。在Javascript中将复杂对象存储为变量不是问题。举个例子:
var o = [new Object({ name: 'Test1', value: 1 }),
new Object({ name: 'Test2', value: 2 })];
alert(o[0].name) // Returns Test1 as a string
通过Ajax调用返回JSON对象来添加或删除数组中的对象是一种相对简单的方法。我没有看到在DOM中存储更多然后只是一个ID来查找Javascript中的值的原因,无论DOM引擎在浏览器中的速度有多快,它都更优雅地存储在Javascript中。
答案 3 :(得分:0)
你也可以使用jQuery.data
jQuery.data( element, key, value )
元素:与数据关联的DOM元素。
key:一个字符串,用于命名要设置的数据。
value:新数据值。