2011-04-12 79 views
4

我正在开发一个复杂的页面,其中包含一些小部件,一些'可拖动'元素和一个<canvas>交互式时间表。复杂的HTML工具提示(存储) - 体系结构建议


问题:

mouseover - 上的元素,可以拖动(实体) - ,我要显示包含一些先进的信息有关的工具提示(实体页的“预览”)该特定元素。

可拖动的项目(我认为他们〜100)以这种方式来表示(其中有些是dinamically创建):

<!-- ... --> 
<div id="entity-1" class="draggable"> 
    <div class="title">title</div> 
    <img src="#URL" alt="..." /> 
    <div class="tooltip-wrapper"></div> 
</div> 
<div id="entity-2" class="draggable"> 
    <div class="title">title</div> 
    <img src="#URL" alt="..." /> 
    <div class="tooltip-wrapper"></div> 
</div> 
<div id="entity-3" class="draggable"> 
    <div class="title">title</div> 
    <img src="#URL" alt="..." /> 
    <div class="tooltip-wrapper"></div> 
</div> 
<!-- ... --> 

其中.tooltip-wrapper初始设置为display:noneopacity:0

一一般工具提示是含有一些细节,即一个有点复杂HTML(很多简化)

<div class="tooltip-entity-wrapper"> 
    <div class="title">entity title</div> 

    <div class="tab"><!-- tab content --></div> 
    <div class="tab"><!-- tab content --></div> 
    <div class="tab"><!-- tab content --></div> 

    <form action="..."> 
     <!-- form content --> 
    </form> 
    <a href="#URL"><!-- full entity page link --></a> 
</div> 

我吨逻辑思维能力约3可能的解决方案:

  • mouseover,(在第一个)使返回特定的提示HTML Ajax请求,注入它的提示,包装里面,拿出来和mouseout隐藏它。
  • mouseover上,(第一个)发出一个ajax请求,返回一个json,通过js(mustache)呈现它,将其注入到工具提示包装中,显示它并在mouseout上隐藏它。
  • 直接渲染工具提示的元素中,并切换它mouseover/mouseout

的CSS /布局/定位是不是一个大问题,也是因为我已经创建了一个工具提示mootools的插件样机(如果u有关于一些伟大的定制mootools的工具提示插件任何建议,请让我知道:))。

我只是需要遵循实施这一先进的“工具提示”系统,或者你有更好的解决方案,建议我哪条路小费/建议。 :)

谢谢大家


附:我正在开发使用Rails3中(和HAML,SCSS,指南针),并作为mootools的JS框架(+胡子的模板系统)的Web应用程序。

回答

4

你真的不能拿一个方法,并选择它比其他的w/o覆盖你的一些业务需求第一。

你需要问自己的问题是:


是SEO重要

如果是:

  • 重要的是不能在体内的含量,因为它不是相关或独特的,可能会影响您的关键字密度,并给谷歌的页面的真实内容给错误的印象,然后AJAX
  • 重要的是要有在体内谷歌看到的,然后在一个隐藏的元素

使我有一种感觉你的应用程序将不会需要太多的这一点,但它是一个有效点。


DOM和 “性能是重要的”

如果是(你已经用帆布... 100+拖拽元素...)

  • 多少(实在是太多了? )节点你会有工具提示(额外的DOM节点)?太多?去与AJAX /事件代表团每页
  • 几个提示:仍可预渲染,以节省额外的请求(S)
  • 足迹将所有尖端的事件,代表
  • 延时等待XHR onComplete不受欢迎?预渲染!

网/请求

,如果你去了ajax的路线,你需要计算的方式,以尽量减少可能的请求的数量,特别是在相同的提示,可以一次又一次触发。这意味着:

  • 缓存请求导致本地页面和检查,对缓存首先从服务器请求之前
  • 如果你的数据不是动态/实时,考虑甚至推到localStorage的下的一些关键/ DB ID ,这将可以在页面重新加载,转换和返回访问者的情况下继续。

至于如何做,我知道你是完全有能力这样做的实际代码这么好运:)

从我的经验的,我做这两者的混合。库存信息经常变化,但并不经常缓存每页负载。使用/大小信息,表单助手等不会改变我在localStorage中的缓存。具有明显SEO价值的工具提示在正文中。