我一直致力于内部网络解决方案,这些解决方案将由系统的一组特定用户使用 - 例如供应链管理。没有搜索引擎优化或营销 - 只有易于使用和简单,吸引他们,使他们的任务简单。
我在ASP.Net上使用MVC2。我将用通用术语解释我的场景。我有一个页面,其中有一个标签视图。第一个选项卡从主表加载记录,其他选项卡加载某些详细信息表的数据。理想的例子就像:
- 选项卡1:添加/编辑客户(主)记录
- 标签2:为客户添加/编辑订单
- 选项卡3:为订单添加/编辑项目(取决于选项卡2)
- 选项卡4:为该客户添加/编辑不同的地址
我正在使用jQuery ui tab。现在根据我对iframe的了解 - 如果我设计这个页面(View)将第一个标签及其内容包含在一个页面(View)中,其余的标签都有iframe,我在其中使用单独的页面(Views)。简而言之 - 所有相关选项卡都有各自的页面。
我看到的好处 -
- 当用户正在处理时,该页面变为v.light并且速度很快 选项卡1将加载其他选项卡 他们的iframe。
- 从功能上讲,每个标签必须有自己的添加/编辑和列表独立。 例如,如果我正在添加地址 然后只有我的地址iframe 精神焕发,其余的 标签/页面无需回发和 重新加载数据。
- 具有通用保存/取消功能需要v.complex 内存缓存对象 如果一切都在一个单一的层次结构 页面预览)。我可以使用用户控件 (即.ascx)但仍在处理中 一举一动就像 巨大的&复杂。
- 我不用担心SEO或书签或动态尺寸。 相反,我正在获得SOC(分离 关注),一切都在 分布式v.well和主要的东西 是因为它变得非常快 回发是分开的。
醇>
..所有这一切,如果我使用iframe :)但是,我没有看到很多像iframes的人喜欢: Are iframes a terrible idea?
如果是这样 - 是否有相同的jQuery替代方案?我希望它具有iframe的优点,并且至少可以通过url和单独的回发来动态加载内容。我不想创建一个凌乱的AJAX blob,它可以处理事情但会使后端同样复杂。
请让我知道你的想法 - 我 不想知道有多好/坏 iframe是,我只想知道什么 适合我的要求,如果有的话 更好地替代iframe .. for 我的情景。
编辑#1:我收到了支持浏览器的iframe列表 -
http://www.webmaster-resources101.com/articles/view/417/
编辑#2:我得到的东西可能是一个更好的选择,而不是iframe的垫脚石 -
它是两个jQuery插件的组合,是着名的jQuery选项卡插件,另一个是adhoc插件,可以控制容器的回发。
jQuery ui tab: http://jqueryui.com/demos/tabs/
的jquery劫持: http://code.google.com/p/jquery-hijack/
这可以吗?还有其他更好的选择吗?
答案 0 :(得分:7)
<强> TL; DR 强>
请让我知道你的想法 - 我不想知道iframe有多好/坏,我只是想知道什么符合我的要求,以及是否有更好的替代iframe ..对于我的场景。
AJAX解决了客户端 - 服务器通信问题。有很多客户端库使ajax非常容易。例如,Backbone与开箱即用的RESTful服务集成。
AJAX的替代品是COMET和WebSockets。
彻底推理
1.页面变为v.light并且速度很快,因为当用户正在使用标签1时,其他标签将加载他们的iframe。
如果你想使用onload处理程序,你必须等待所有的iframe加载。
完全相同的概念适用于按顺序加载HTML。我不认为HTML加载是一个明显的瓶颈。我无法想象使用iframe会有明显的速度提升。
然而,使用合理的HTML和延迟加载/分页可能会显着提高速度。
2.功能上,每个标签必须有自己的添加/编辑和列表独立。例如,如果我正在添加地址,那么只会刷新我的地址iframe,其余的标签/页面不需要回发并重新加载数据。
每个标签应该有自己的表单,而不是你可以回发。如果用户有JavaScript,那么你使用ajax。
3.如果所有内容都在一个页面中(视图),则具有通用保存/取消功能将需要对象层次结构的v.complex内存中缓存。我可以使用用户控件(即.ascx),但仍然可以在一个动作中处理所有内容就像巨大的&amp;复杂。
没有。使用骨干/脊椎。实现客户端MVC,它非常简单,结构良好。
4.我不用担心SEO或书签或动态尺寸。相反,我正在获得SOC(关注点分离),所有内容都被分发到v.well,主要的是它变得非常快,因为回发是分开的。
你仍然回帖而不是使用视觉上较慢的ajax。使用适当的HTML5技术,包括客户端MVC,它将分发得非常好,速度非常快。
<强>缺点:强>
它减慢了你的速度,并且是一种痛苦的发展。 iframe中的所有内容都是硬连接在一起的,因为它们都与一个客户有关。
您将如何处理主标签中的客户更改?您是否要重新加载其他3个iframe以使用正确的数据重新填充它?
这是非常昂贵和缓慢的
可以使用此元素的上下文:预期嵌入内容的位置。
您的标签不是嵌入内容。只有普通的HTML表单,它们应该是。
您也无法重复使用元素和全局数据,因为每个iframe都是沙盒。这意味着扩展第五个选项卡会很麻烦,因为您必须开发一个全新的选项卡,而不是插入现有的功能。
我相信你的主要问题是没有理解有很多工具可以编写高质量的javascript应用程序来解决你的问题。
使用backbone或spine或knockoutjs。您可能还想考虑您选择的模板引擎(我会推荐EJS或Jade)
答案 1 :(得分:0)
可以使用iframe
,前提是您可以控制运行应用程序的浏览器。
否则,您很快就会遇到浏览器兼容性等问题。
答案 2 :(得分:0)
我不得不离开这篇文章来完成它 - Alternative for iframes for jQuery ui tabs plugin - with support for postback
我不想要完全“JSified”ajax基础模型处理,因为它在表示层中引入了业务对象级别的详细信息。因此,为了保持抽象,我最终使用了一个jQuery插件jquery.forms.js,它允许我的表单形式化。
结合MVC的“局部视图”概念,我能够实现完整的AJAX回发解决方案(不会使其变得复杂或将我的模型级别处理作为特征在客户端作为knockoutjs,backbone等... ...很棒,但我想保持简单和控制(在服务器端))
谢谢。