【问题标题】:RESTfully getting HTML partial content via AJAX in Rails在 Rails 中通过 AJAX 以 RESTfully 方式获取 HTML 部分内容
【发布时间】:2010-01-12 02:54:38
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: jquery ruby-on-rails ajax rest partial-views


    【解决方案1】:

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

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

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

    【讨论】:

    • 您的解决方案看起来非常可靠并且符合 REST 原则。 +1
    • 谢谢,我尽力做到了。问题在于,大约 2 个 HTML 标签似乎很麻烦:-P 但如果没有其他问题,我会继续使用它。
    • “为一个部分/视图拥有一个完整的其他控制器/资源似乎有点矫枉过正” - 同意,但为了清楚起见,我也这样做了。 +1
    • 这就是我喜欢的解决方案;它与 MVC 和 REST 都非常一致。
    【解决方案2】:

    不是一个答案,而是一个建议:查看(查看源代码)其他玩家是如何完成无限滚动的,例如 Bing's image search37 Signals Haystack(Rails 中当然也有)。

    结果

    (克雷格编辑)

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

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

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

    【讨论】:

    • 这是我讨厌 AJAX 的原因之一:试图找出魔法发生在代码的哪一部分。 :-P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多