使用带有 Sammy.js 的单个模板(把手或 Mustache)的 Rails 客户端/服务器端渲染

Nou*_*man 5 ruby-on-rails mustache sammy.js

我在网上搜索了一段时间寻找教程,但运气不佳。

据我了解,Twitter 使用 Rails 中的单个 Mustache.js 模板在第一个页面加载时从服务器呈现,然后通过他们自己的 ajax 转换系统(很像 sammy.js)。

我可以在 rails 中加载把手和 sammy.js,但我不知道如何从服务器(rails)和客户端(sammy)端共享单个模板文件。

Mit*_*tch 4

我个人没有构建任何在服务器端和客户端使用相同模板的东西,但这是我可以想到的一种方法。

假设你有一个图像部分(_image.mustache):

<div class="image">
  <a href="{{ view_url }}">
    <img height="{{ height }}" width="{{ width }}" src="{{ src }}" />
  </a>
</div>
Run Code Online (Sandbox Code Playgroud)

当您在服务器端渲染页面时,您可以将其用作普通部分并将其插入到 Mustache。然后,您还可以在脚本标记中渲染它以使用Resig 微模板方案

{{{image_js_template}}}
Run Code Online (Sandbox Code Playgroud)

在您的 Mustache 视图类中:

def image_js_template
  content_tag :script, :type => "template", :id => "image-template" do
    render :text => self.partial('image')
  end
end
Run Code Online (Sandbox Code Playgroud)

这应该会呈现未插值的模板({{ 仍在文本中)。现在您可以通过 Javascript 的 id 来获取该模板。在backbone.js中你可以这样做:

class Views.AllImageList extends Backbone.View
  initialize: (options) ->
    @template = $('#image-template').html()
Run Code Online (Sandbox Code Playgroud)

我没有使用过 Sammy.js,但它似乎希望所有模板都是公开可用的,这可能会带来问题。但是,您仍然可以使用上面的技术并直接传递 render() 和partial() jQuery 对象(如此处所示

这是基本想法,但您可能可以做很多事情来使其更加无缝。我会查看Jammit 关于使用模板的部分,特别是关于使用 Mustache 的部分。ICanHaz.js还提供了一种简化客户端 Mustache 模板使用的方法。