1

在我的 Rails 应用程序中,我有一个名为“Photo”的模型和一个 PhotosController。正如所料,我已经对 URL 进行了 RESTful 路由,以便 URL“/photos”返回所有照片的 HTML 呈现列表(作为缩略图),而“/photos/foo”返回照片的 HTML 呈现表示使用“foo”的friendly_id。(我也做 XML、JSON 和二进制表示,但它们在这里不相关。)

我想让列表页面在初始加载时显示照片缩略图的子集,然后通过 AJAX(特别是 jQuery)动态地将更多缩略图添加到我的列表中。<li><img>我已经有了在照片/索引视图中呈现单个照片列表项(基本上是 )的 HTML 。由于 jQuery 可以将 HTML 直接注入到 DOM中,我认为最好的办法是将列表项代码提取到一个部分中,然后通过 AJAX 将该部分加载到列表中。

我的问题是:将 HTML 从部分中取出并放入 DOM 的最佳方法是什么?

(我已经有了实施的想法;我会将其作为答案发布,以允许适当的投票和评论)。

4

2 回答 2

3

我认为最 RESTful 的方式是使照片的列表项表示/视图成为照片的子资源。这将涉及:

  • 创建一个新的 Photos::ThumbnailsController
  • 将“/photos/:id/thumbnail”路由到该控制器(因此我的示例 URL 将是“/photos/foo/thumbnail”)
  • 为此控制器创建索引操作(可能没有其他操作)
  • 让索引操作呈现包含列表项代码的部分。(此时将局部视图设为完整视图可能是有意义的)。
  • 当我想将缩略图添加到列表中时,对“/photos/:id/thumbnail”进行 AJAX 调用。

不过,为一个部分/视图拥有一个完整的其他控制器/资源似乎有点矫枉过正。有没有更好的办法?

于 2010-01-12T02:54:50.133 回答
1

不是答案,而是建议:查看(查看源代码)其他玩家是如何完成无限滚动的,例如Bing 的图像搜索37 Signals Haystack(当然也在 Rails 中)。

结果

(克雷格编辑)

HayStack 调用"/listings.js"。这意味着他们可能在他们的 responds_to 调用中使用了不同的 Rails 格式。我考虑过这个,但我不太喜欢它,因为:

  • 这取决于 URL 中的格式(在本例中为 js)不用于任何其他目的(并且永远不会)。
  • 它依赖于 JavaScript(以及那是混蛋的 JS/HTML)来完成它的工作。为了一致性、可重用性和可缓存性,我更喜欢使用纯 HTML。

Bing 的无尽搜索 JS 被缩小了,所以我没有花太多时间来解开它。

于 2010-01-12T12:50:58.740 回答